解题思路:
1):设主串为

A  B  C  D  E  F  G  H  I  G  K

2):设模式串为

E  F  G

3):

①:开始,先从主串的第一个字符开始匹配

A  B  C  D  E  F  G  H  I  G  K

E  F  G    (匹配失败)

②:从主串第二个字符开始匹配

B  C  D  E  F  G  H  I  G  K

    E   F  G    (匹配失败)

③:从主串第三个字符开始匹配

A  B  C  D  E  F  G  H  I  G  K

         E   F  G    (匹配失败)

....................

④:直到从主串第五个字符开始时匹配成功

A  B  C  D  E  F  G  H  I  G  K

                   E   F  G    (匹配成功)


参考代码:

#include<stdio.h>
#include<string.h>

typedef struct string_{
  char data[99];
  int length;

}*String,STRIng;

int Match(String Str,String Substr);

int main()
{
  int k; /*存放模式串出现位置*/
  STRIng Str,Substr; /*定义主串和模式串*/

   while(scanf("%s",Str.data)!=EOF)
    {
         scanf("%s",Substr.data);
         /*求出主串,和模式串的长度*/
          Str.length=strlen(Str.data);
          Substr.length=strlen(Substr.data);

          k=Match(&Str,&Substr); /*求模式串第一次出现的位置*/
          printf("%d\n",k+1);  /*輸出位置,因爲這裏字符串第一个下标从0开始,所以k要加上一*/
    }
return 0;
}
/*----------------------------------------------*/
int Match(String Str,String Substr)
{
   int i=0,j=0,k=i;/*i,j分别指向主串和模式串的第一个字符,k表示这次比较从主串中下标为k的地方开始*/
    while(i<Str->length&&j<Substr->length)
     {
          if(Str->data[i]==Substr->data[j])
           {
             ++i;
             ++j;
           }
           else
           {
             i=++k;
             j=0;
           }
     }

     if(j==Substr->length)
       return k;
       else
       return -1; /*返回-1是因为没找到要输出0*/

}

别忘点赞哦-.-

点赞(9)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 1 条评论

卢本伟 11月前 回复TA
#include<stdio.h>
#include<string.h>
int main()
{
	int j=0,i;
	char S[99];
	char s[99];
	while(scanf("%s",S)!=EOF) 
	{
		scanf("%s",s);
	    for(i=0;i<strlen(S);i++)
	    {
	    	if(S[i]==s[j])
	    	j++;
	    	else
	    	j=0; //j归零 
	    	if(j==strlen(s))  //找到子串 
	    	break;  //退出for循环 
		}  
		if(j!=0)
	       	printf("%d",i-strlen(s)+2); //字串首位置 
	        else
	        printf("%d",0);
}
	return 0;
 }  学了一个月  有没有大神教教为什么这样提交是错的  用devc++运行的时候是没问题的