我有两个邮政编码char*,我想要比较,忽略大小写。有没有一个函数可以做到这一点?
或者我必须遍历每个use tolower函数,然后进行比较?
你知道这个函数将如何处理字符串中的数字吗?
谢谢
发布于 2011-04-28 23:21:23
在C标准中没有这样做的函数。符合POSIX的Unix系统要求在头strings.h中有strcasecmp;微软系统有stricmp。为了便于移植,可以编写自己的代码:
int strcicmp(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;
}
}但请注意,这些解决方案都不能处理UTF-8字符串,只能处理ASCII字符串。
发布于 2011-04-28 23:11:16
看看strings.h中的strcasecmp()。
发布于 2016-01-04 19:16:54
我发现了名为from的内置方法,它在标准头文件中包含额外的字符串函数。
下面是相关的签名:
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));
}https://stackoverflow.com/questions/5820810
复制相似问题