我试图在文本中找到模式,出了什么问题?

I'm trying to find the pattern in the text,what going wrong?

本文关键字:什么 问题 模式 文本      更新时间:2023-10-16
#include <iostream>
using namespace std;
int main()
{
string s1="panamabananas";
string s2="nana";
int i,j,k=0;
string count="";
for(i=0;i<s1.length();i++)
{
k=0;
if(s2[k]==s1[i]);
{                           
count+=s2[k];
for(j=i+1;j<i+s2.length();j++)
{       
k++;
if(s2[k]==s1[j])
{
count+=s2[k];
cout<<"it is: "<<count<<endl;
}
else
{
count="";
break;
}                   
}
}
}
cout<<"the matched string is "<<count;
return 0;
}

如果模式 s2 存在于文本 s1 中,则对其进行搜索。并管理计数器来写入模式匹配的内容。计数器最后必须等于nana,即它表示文本中存在nanapanamabananas。 我不明白这里出了什么问题。

看起来即使在找到模式后,您也会重置计数,因为您没有执行任何操作来突破外部 for 循环并且它继续。它将第一个字符串中的 nana 与第二个字符串中的 nana 进行比较,找到匹配项,从内部 for 循环中掉出,但随后又回到外部 for 循环中。稍后它将到达 s1 中的最后一个 n,再次触发 if 语句,并尝试将 "nas" 与 "nana" 匹配。当 s 与 n 不匹配时,它会将计数重置为 "。

无论如何,如果您添加一个 if 语句检查 k 是否是 s2 的长度,那么一旦找到模式,您就可以立即返回。

无论如何,这就是查看代码的样子。我建议使用调试器来完成它,该调试器允许您单步执行代码,以便您可以在发生时看到正在发生的事情。