并假设现在文本串S匹配到 i 位置,模式串P匹配到 j 位置,则有:
- 如果当前字符匹配成功(即S[i] == P[j]),则i++,j++,继续匹配下一个字符;
- 如果失配(即S[i]! = P[j]),令i = i - (j - 1),j = 0。相当于每次匹配失败时,i 回溯,j 被置为0
下赋代码:
#include<iostream>
using namespace std;
int main()
{
int x;//保存文本长度
int y;//保存目标字符串长度
string s;
string a;
int i=0;//记录文本
int j=0;//记录目标文本
cout<<"please input string:"<<endl;
getline(cin,s);
cout<<"please input string that you want to find:"<<endl;
cin>>a;
x=s.size();
y=a.size();
while(i<x&&j<y)
{
if(s[i]==a[j])
{
i++;
j++;
}
else
{
i=i-j+1;//将i,j回溯
j=0;
}
}
if(j==y)
{
cout<<"you have found string"<<" "<<a<<endl;
}
else
{
cout<<"Do not find this string!"<<endl;
}
return 0;
}