在主串里匹配子串字符搜索
上面一排是主串,下面一排是子串,接下来在主串里面搜索子串
首先,对于这个问题有一个很单纯的想法:从左到右一个个匹配,如果这个过程中有某个字符不匹配,就跳回去,将模式串向右移动一位。这有什么难的?
我们可以这样初始化:
之后我们只需要比较i指针指向的字符和j指针指向的字符是否一致。如果一致就都向后移动,如果不一致,如下图:
A和E不相等,那就把i指针移回第1位(假设下标从0开始),j移动到模式串的第0位,然后又重新开始这个步骤:
下面写了个例子:在主串abcdefg里搜索子串cde 代码如下:
#include "stdio.h"
int main()
{
char s[]="abcdefg\0"; //主串
char t[]="cde\0"; //子串
int i=0,j=0; //定义 i j 用于做主串子串的下标
while(s[i]!='\0' && t[j]!='\0') //当主串和子串都没到结尾
{
if(s[i]==t[j]) //当主串和子串当前字符相同时
{
i++; //同时++ 往后遍历
j++;
}
else{ //如果不相同
i=i-j+1; //主串则回起点的下一个字符重新开始匹配
j=0; //子串回到0重新开始
}
}
if(t[j]=='\0') //如果匹配到子串结尾了
{
printf("%d",i-j); //则输出子串在主串的哪一个下标开始的
}
else{
printf("-1"); //如果搜索不出来 则输出-1
}
}
运行结果:输出的是字符串数组的下标