不区分大小写的stringcomp in C

我有两个邮政编码char* ,我想比较,忽略大小写。 有这样的function吗?

或者我必须循环使用tolower函数,然后进行比较?

任何想法如何将这个函数与string中的数字反应

谢谢

在C标准中没有这样做的function。 符合POSIX的Unix系统需要在头文件strings.h包含strcasecmp ; 微软系统有stricmp 。 要在便携式方面,写你自己的:

 int strcicmp(char const *a, char const *b) { for (;; a++, b++) { int d = tolower(*a) - tolower(*b); if (d != 0 || !*a) return d; } } 

但请注意,这些解决scheme都不能使用UTF-8string,只能使用ASCIIstring。

看看strings.h strcasecmp() 。

我会使用stricmp() 。 它比较两个string,而不考虑大小写。

请注意,在某些情况下,将string转换为小写可能会更快。

我发现内置的这种方法,从中包含标准头的附加string函数。

这里是相关的签名:

 int strcasecmp(const char *, const char *); int strncasecmp(const char *, const char *, size_t); 

我还发现它在xnu内核(osfmk / device / subrs.c)中是同义词,它在下面的代码中实现,因此与原始的strcmp函数相比,您不希望在行为方面有任何改变。

 tolower(unsigned char ch) { if (ch >= 'A' && ch <= 'Z') ch = 'a' + (ch - 'A'); return ch; } int strcasecmp(const char *s1, const char *s2) { const unsigned char *us1 = (const u_char *)s1, *us2 = (const u_char *)s2; while (tolower(*us1) == tolower(*us2++)) if (*us1++ == '\0') return (0); return (tolower(*us1) - tolower(*--us2)); } 
 static int ignoreCaseComp (const char *str1, const char *str2, int length) { int k; for (k = 0; k < length; k++) { if ((str1[k] | 32) != (str2[k] | 32)) break; } if (k != length) return 1; return 0; } 

参考

你可以得到一个想法,如果你没有任何图书馆,从这里开始实施一个有效的想法

它为所有256个字符使用一张表。

  • 在那张表中,除了字母之外,所有字符都使用了ASCII码。
  • 对于大写字母代码 – 下面的封装符号的表格代码。

那么我们只需要遍历一个string,并比较我们的表格单元格给定的字符:

 const char *cm = charmap, *us1 = (const char *)s1, *us2 = (const char *)s2; while (cm[*us1] == cm[*us2++]) if (*us1++ == '\0') return (0); return (cm[*us1] - cm[*--us2]); 
 int strcmpInsensitive(char* a, char* b) { return strcmp(lowerCaseWord(a), lowerCaseWord(b)); } char* lowerCaseWord(char* a) { char *b=new char[strlen(a)]; for (int i = 0; i < strlen(a); i++) { b[i] = tolower(a[i]); } return b; } 

祝你好运

Edit-lowerCaseWord函数得到一个char *variables,并且返回这个char *的小写值。 例如char *的值为“AbCdE”,将返回“abcde”。

基本上它是把两个char *variables转换成小写后,并使用strcmp函数。

例如,如果我们为“AbCdE”和“ABCDE”的值调用strcmpInsensitive函数,它将首先以小写(“abcde”)返回两个值,然后对它们执行strcmp函数。