给定这些字符串
char * foo = "The Name of the Game";
char * boo = "The Name of the Rose"
我想确定第一个不匹配字符的地址,以便提取公共标头(“ The Name of the ”)。
我知道手动编码的循环是微不足道的,但我很好奇是否有任何变体strcmp()
或其他库函数可以自动为我执行此操作?C++ 中的答案有什么不同吗?
string.h
功能。我相信这个简单的功能会做你想做的事,使用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)
我相信您可以使用 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);