问题描述:如果串s2是串s1的子串,求串s2在串s1中第一次出现的位置。
分析:用串s2的第一个字符依次从串s1的第一个字符开始比较,不等则后移一个位置。。。。
代码整理:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int index(char s1[],char s2[],int n1,int n2)
{ int i,j;
i=0;j=0;
while(i<n2&&j<n1) /*反复比较*/
if(s2[i]==s1[j]){
i++;j++;} /*继续比较下一个*/
else {j=j-i+1; /*主串、子串的i、j值回溯,重新开始下一次匹配*/
i=0;}
if(i>=n2)
return(j-n2+1);
else return 0;
}
void main()
{ char s1[]="abbaba";
char s2[]="aba";
int a,n1,n2;
n1=strlen(s1);n2=strlen(s2);
a=index("abbaba","aba",n1,n2);
if(a!=0)
printf("匹配成功,s[]在c[]中第一个字符序号为:%d\n",a);
else printf("匹配失败");
}
执行结果: