确定字符串相等性比较失败的位置

时间:2013-02-11 17:44:45

标签: c c-strings

鉴于这些字符串

char * foo = "The Name of the Game";

char * boo = "The Name of the Rose"

我想确定第一个不匹配字符的地址,以便提取公共标题(“ 的名称”)。

我知道手动编码的循环很简单,但我很好奇是否有strcmp()或其他库函数的变体会自动为我做这个?在C ++中答案是否有所不同?

3 个答案:

答案 0 :(得分:1)

不。没有这样的标准string.h函数。

答案 1 :(得分:0)

我相信这个简单的功能会使用strncmp做你想做的事 (轻度测试......)

int find_mismatch(const char* foo, const char* boo) 
{
    int n = 0;
    while (!strncmp(foo,boo,n)) { ++n; }
    return n-1;
}

int main(void)
{
    char * foo = "The Name of the Game";
    char * boo = "The Name of the Rose";
    int n = find_mismatch(foo,bar);

    printf("The strings differ at position %d (%c vs. %c)\n", n, foo[n], boo[n]);
}

<强>输出
The string differ at position 16 (G vs. R)

答案 2 :(得分:-2)

我相信你可以使用strspn(str1,str2)来返回str1的初始部分的长度,该部分仅包含str2的部分。

char *foo = "The Name of the Game";
char *boo = "The Name of the Rose";
size_t len = strspn(foo, boo);

printf("The strings differ after %u characters", (unsigned int)len);