首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C中不区分大小写的字符串比较

C中不区分大小写的字符串比较
EN

Stack Overflow用户
提问于 2011-04-28 23:09:43
回答 12查看 184.7K关注 0票数 87

我有两个邮政编码char*,我想要比较,忽略大小写。有没有一个函数可以做到这一点?

或者我必须遍历每个use tolower函数,然后进行比较?

你知道这个函数将如何处理字符串中的数字吗?

谢谢

EN

回答 12

Stack Overflow用户

发布于 2011-04-28 23:21:23

在C标准中没有这样做的函数。符合POSIX的Unix系统要求在头strings.h中有strcasecmp;微软系统有stricmp。为了便于移植,可以编写自己的代码:

代码语言:javascript
运行
复制
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字符串。

票数 68
EN

Stack Overflow用户

发布于 2011-04-28 23:11:16

看看strings.h中的strcasecmp()

票数 44
EN

Stack Overflow用户

发布于 2016-01-04 19:16:54

我发现了名为from的内置方法,它在标准头文件中包含额外的字符串函数。

下面是相关的签名:

代码语言:javascript
运行
复制
int  strcasecmp(const char *, const char *);
int  strncasecmp(const char *, const char *, size_t);

我还在xnu内核中找到了它的同义词(osfmk/device/subrs.c),并且在下面的代码中实现了它,因此与原始的strcmp函数相比,您不会期望在数量上有任何行为变化。

代码语言:javascript
运行
复制
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));
}
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5820810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档