我正在尝试编写返回子字符串索引的程序。
但如果我有两条这样的字符串:
(go-substring)
# ex. mango go man - go
"mango go man"
是主字符串,我们在其中找到子字符串"go"
。
我希望程序返回7而不是4。我认为问题是它没有穿过整个字符串,但我不明白为什么。
int findsub(const char *str1,const char *str2)
{
int l1=0,l2=0;
while(*(str1+l1)!=' ')
{
l1++;
}
while(*(str2+l2)!=' ')
{
l2++;
}
int i,j;
for(i=0,j=0;*(str1+i)!=' '&&*(str2+j)!=' ';i++)
{
if(*(str1+i)==*(str2+j))
j++;
}
if(j==l2)
{
return i-j+1;
}
else
{
return 0;
}
}
您没有将计数器j返回到0,所以在它看到第一个进入后"芒果";如果不再工作的情况
这个代码可以解决你的问题,但你还有另一个问题,那就是如果算法找到了第二个字符串的字符,即使它是分离的,它也会起作用
试着在"g"one_answers"o"之间放空格,它就会起作用,要找到整个单词,你需要使用嵌套循环
#include <stdio.h>
int findsub(const char *str1, const char *str2)
{
int l1 = 0, l2 = 0;
while (*(str1 + l1) != ' ')
{
l1++;
}
while (*(str2 + l2) != ' ')
{
l2++;
}
int i, j, x;
for (i = 0, j = 0; *(str1 + i) != ' ' && *(str2 + j) != ' '; i++)
{
if (*(str1 + i) == *(str2 + j))
{
j++;
x = i;
}
if (j == l2 - 1)
{
j = 0;
}
}
return x + 1;
}
int main()
{
int num = findsub("mango go man", "go");
printf("%dn", num);
}