程序如下,求好心人解析.函数这边不理解(最好每行帮忙注解下),另外,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));}
#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));}