c-最后一个子字符串的索引



我正在尝试编写返回子字符串索引的程序。

但如果我有两条这样的字符串:

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

最新更新