Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 确定字符串相等比较失败的位置_C_C Strings - Fatal编程技术网

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

C 确定字符串相等比较失败的位置,c,c-strings,C,C Strings,考虑到这些条件 char * foo = "The Name of the Game"; char * boo = "The Name of the Rose" 我想确定第一个不匹配字符的地址,以便提取公共头(“名称”) 我知道手工编码的循环很简单,但我很好奇是否有strcmp()或其他库函数的变体可以自动为我实现这一点?答案是C++中的任何不同吗?< /P> < P>我相信这个简单的函数将按照你想要的,使用 STRNCMP < /代码>。 (轻微测试…) 输出 字符串在位置16处不同(G与

考虑到这些条件

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

char * boo = "The Name of the Rose"
我想确定第一个不匹配字符的地址,以便提取公共头(“名称”)


我知道手工编码的循环很简单,但我很好奇是否有
strcmp()
或其他库函数的变体可以自动为我实现这一点?答案是C++中的任何不同吗?< /P> < P>我相信这个简单的函数将按照你想要的,使用<代码> STRNCMP < /代码>。 (轻微测试…)

输出

字符串在位置16处不同(G与R)

我相信您可以使用strspn(str1,str2),它返回仅由str2部分组成的str1初始部分的长度

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);

不。不存在这样的标准函数。不,我认为不存在这样的函数。哎哟。嗯,这使用了strncmp,但不是一种好的方式。长弦演奏会很糟糕!如果您想获得更好的性能,还可以对字符串不同的地方进行二进制搜索。这段代码会有点复杂,问题是strcpy的ready有O(n)性能,所以find_不匹配基本上有O(n^2)。将
while
行替换为
while(*foo++!=*bar++)++n是所有需要的。那会更快,是的。但是它没有使用您最初要求的
strXXX
函数。本页()上的示例清楚地表明,它的工作方式与您认为的不同。
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);