有没有办法比较字符串指针忽略他们的情况?

时间:2016-02-07 05:08:09

标签: c

我想比较字符串指针而忽略它们的情况。我想不出任何可以做到这一点的C函数。

例如:

ToMMy == tommy == TOMMY == tOMmy etc.....

有谁知道如何在C中完成这项工作?

3 个答案:

答案 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;
}