c语言,利用函数查到字符串2在字符串1首次出现的位置,求解析!

程序如下,求好心人解析.函数这边不理解(最好每行帮忙注解下),另外,2行for循环后面为什么有分号.财富不多,请见谅.
#include<stdio.h>
int findsub(char *str1,char *str2)
{int i=0,j=0;
while(str1[i]!='\0')
{for(;str1[i]!='\0'&&str1[i]!=str2[0];i++);
if(str1[i]==str2[0])
{for(j=0;str1[i+j]!='\0'&&str1[i+j]==str2[j];j++);
if(str2[j]=='\0')
return i+1;
}
i++;
}
return -1;
}
main()
{char s1[80],s2[20];
gets(s1);
gets(s2);
printf("%d",findsub(s1,s2));
}
最新回答
风中的歌声

2024-12-02 00:10:18

#include<stdio.h>
int findsub(char *str1,char *str2)
{int i=0,j=0;
while(str1[i]!='\0') //
字符串
第i个不为空字符,则执行循环体

{for(;str1[i]!='\0'&&str1[i]!=str2[0];i++); //
for循环
没有循环体
循环跳出条件为:
判断字符串1第i个为空字符则跳出for循环,或者
判断字符串1第i个等于字符串2第一个字符时跳出

跳出循环体就表示现在字符串1第i个字符和字符串2的第 一个字符是一样的

if(str1[i]==str2[0]) //这个判断是防止字符串1循环完都没有与字符串2第一字符一样的情况
也就是说防止for第一个判断跳出。
所以如果是for循环是第二判断跳出的,则执行这个if
{for(j=0;str1[i+j]!='\0'&&str1[i+j]==str2[j];j++);
//for循环没有循环体
跳出条件:
字符串1遇到空字符 或者
字符串1从第i个字符起(因为与字符串2第一个一样),1、2字符串都逐 个递加比较(对应的递加),一直到不相等跳出
if(str2[j]=='\0') //如果跳出时字符串2最后一个字符的下一个字符为空字符。 说明字符串1全部 按顺序比较都和字符串2一样
return i+1; 返回字符串1中出现字符串2的位置
}
i++; //否则自加后回到while,判断字符串1的下一个是否为空字符
}
return -1; //如果while循环判断字符串1都没有找到合适的返回-1.
如果有合适的话,while循环里面已经返回了,不会到这里的
}
main()
{char s1[80],s2[20];
gets(s1);
gets(s2);
printf("%d",findsub(s1,s2));
}