我想比较字符串指针而忽略它们的情况。我想不出任何可以做到这一点的C函数。
例如:
ToMMy == tommy == TOMMY == tOMmy etc.....
有谁知道如何在C中完成这项工作?
答案 0 :(得分:1)
strcasecmp()
不是标准的C函数,但它适用于大多数编译器。
自己写:
int strnocasecmp(char const *a, char const *b)
{
for (;; a++, b++) {
int d = tolower((unsigned char)*a) - tolower((unsigned char)*b);
if (d != 0 || !*a)
return d;
}
}
不要忘记#include <ctype.h>
的{{1}}库。
答案 1 :(得分:1)
如果可以仅支持单字节英文字母忽略大小写,只需将每个字符转换为小写(或大写)并进行比较。
#include <ctype.h>
int cmp(const char *a, const char *b) {
while (*a || *b) {
int c1 = tolower((unsigned char)*a++);
int c2 = tolower((unsigned char)*b++);
if (c1 != c2) return c1 > c2 ? 1 : -1;
}
return 0;
}
答案 2 :(得分:0)
如果您可以strcasecmp
访问string.h
(POSIX),那可能是您最好的选择。
strcasecmp("TOMMY", "tOMmy") == 0
否则,制作自己的东西并不难。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdbool.h>
bool check_strings(const char* str1, const char* str2)
{
if (strlen(str1) != strlen(str2))
return false;
do {
if (tolower(*str1++) != tolower(*str2++))
return false;
} while(*str1 || *str2)
return true;
}