【发布时间】:2021-11-18 22:31:58
【问题描述】:
我在 C 中实现了 C“strstr”函数。这个函数在参数中接受 2 个字符串,并判断第一个字符串是否包含第二个字符串。然而,虽然预期结果为假,但它返回真。请给我一个解释好吗?
代码如下:
#include <stdio.h>
#include <string.h>
int searchStr(char *ch1, char *ch2);
int searchStr(char *ch1, char *ch2)
{
int i = 0;
int j = 0;
while (i < strlen(ch1) - 1)
{
while (j < strlen(ch2) - 1)
{
if(i == strlen(ch1) - 1)
{
return 0;
}
else
{
if (ch1[i] == ch2[j])
{
j++;
i++;
}
else
{
if (j > 0)
{
j = 0;
}
else
{
i++;
}
}
}
}
return 1;
}
}
int main()
{
printf("%d", searchStr("science", "sh"));
}
问候
YT
【问题讨论】:
-
那个双while循环对我来说太复杂了。不如把
return -2放在程序的最后,看看有没有漏掉一些情况? -
return 1是您想要的吗?是否有任何可能的逻辑路径没有return? -
从
i= 0 和j= 0 开始,您的代码比较相等的第一个字符。然后它将j增加到1,将i增加到1。然后它执行循环测试j < strlen(ch2) - 1。由于ch2是“sh”,它的长度是2,所以strlen(ch2) - 1是1,而j不小于1,所以循环结束,代码返回1。重写你的代码,使i遍历每个可能的起始位置,并且在循环内永远不会改变(例如,在测试子字符串时),只有在继续到下一个起始位置时。修复j上的循环以检查所有ch2。
标签: c algorithm boolean c-strings strstr