房天下 > 房天下问答 > 业主生活 > 其他
  • 帮助看一看这段C程序

    下面这段程序,是在字串中找子串的函数,在匹配时返回子串在串中的起始位置,不匹配时返回-1。编译时while(*p2 && *p2 == *p)句出错。请解释一下本程序找子串的过程,并指出错误原因。find_substr(s1,s2)char *s1,*s2;{register int t;char *p1,*p2,p;for (t=0;s1[t];t++){ p=&s1[t]; p2=s2; while(*p2 && *p2 == *p){ p++; p2++; } if(!*p2) return t; } return -1; }

    提问者:伴奏改版很多

    发布于2011-01-24

共1个回答
  • lgy284 丨Lv 0
    声明p时少写了 个*,以下为正解和注释测试结果:#include<stdio.h>find_substr(s1,s2)char *s1,*s2;{register int t;char *p1,*p2,*p;for (t=0;s1[t];t++){//大循环对字符串s1进行逐字母开始的字符串与s2比较p=&s1[t];//第t个字母开始的p2=s2;while(*p2 && *p2 == *p){//知道s2结束,逐字母比较//相同时循环结束时p2指向0,否则不是p++;p2++;}if(!*p2) return t;//找到,返回位置}return -1;//没找到,返回-1}void main(){ char *s1="Here is a simple test designed by 小恩!"; char *s2="simple"; int t,i; t=find_substr(s1,s2); if(-1!=t) { printf(s1); printf("\n"); for(i=0;i<t;i++) printf(" "); printf("^\n"); for(i=0;i<t;i++) printf("_"); printf("|\n"); for(i=0;i<t;i++) printf("_"); printf(s2); printf("\n"); } else { printf("Not Find!\n"); } return;}/*结果:Here is a simple test designed by 小恩! ^__________|__________simple请按任意键继续. . .*/
    +1 2011-01-25 举报
热门人气推荐
免责声明:问答内容均来源于互联网用户,房天下对其内容不负责任,如有版权或其他问题可以联系房天下进行删除。