3

给定这些字符串

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

char * boo = "The Name of the Rose"

我想确定第一个不匹配字符的地址,以便提取公共标头(“ The Name of the ”)。

我知道手动编码的循环是微不足道的,但我很好奇是否有任何变体strcmp()或其他库函数可以自动为我执行此操作?C++ 中的答案有什么不同吗?

4

3 回答 3

1

没有。不存在这样的标准string.h功能。

于 2013-02-12T20:55:59.373 回答
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)

于 2013-02-11T18:01:10.983 回答
-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);
于 2013-02-11T18:07:30.467 回答