我有一个任务是在一个句子中找到“EYE”这个词(更像是chars行),例如:EYEYECARASDFG
。正如你所看到的,“EYE”这个词有两次相互重叠。我想cout
句子中出现“EYE”这个词多少次。我写了一些看起来像这样的代码:
#include <iostream>
#include <string>
using namespace std;
string sentence;
int main()
{
int i = 0;
cin >> sentence;
while()
{
if (std::string::npos != sentence.find("EYE"))
{
i++;
}
}
cout << i;
}
现在没有while
循环,它在句子中找到了EYE,它有点起作用。所以我觉得,要计算重叠并让代码运行直到它结束,我需要循环它。所以我虽然while循环是最好的,但我不知道如何循环它,将什么放入while
循环的括号中
答案 0 :(得分:2)
首先需要while
中的条件。如果你想要无限循环使用true
作为你的陈述。作为初稿,尝试用蛮力&#34;进行。如果等于&#34; EYE&#34;,请检查句子的每3个字母子串。它将是一个循环和3个条件或2个循环和1个条件。然后阅读一些文本搜索算法,例如KMP。
如果您只是想让这段代码运行,请使用以下代码:
int pos = 0;
while(true) {
pos = sentence.find("EYE", ++pos);
if (pos != std::string::npos) {
i++;
} else break;
}
答案 1 :(得分:1)
您可以使用有限状态机来完成此操作。 (Google it。)这是高效且易于理解的。当您阅读这些字符时,有三种状态需要区分,即1)当最近看到的字母是“E”时,2)当最后两个字母按顺序是“EY”时,3)其他所有字母。当你经历一个角色的时候,每当你处于状态2并且找到另一个“E”时,将“找到” - 计数增加一个。
看看你是否可以从那里拿走它而不再提示。
除了“EYE”之外,这个想法可以扩展到任意字符串,你可以编写一个类似的编译器来为这些字符串生成有限状态机。但这是一个更高级的任务。
答案 2 :(得分:0)
#include<iostream>
#include<string>
using namespace std;
main()
{
string sen, sub;
int pos;
cout<<"Enter the Sentence"<<endl;
getline(cin,sen);
cout<<"Enter string to find"<<e`ndl;
cin>>sub;
for (int i=1;(pos=sen.find(sub)) != -1 ;i++)
{
sen=sen.substr(++pos);
cout<<"Found = "<<sub<<" "<<i<<" Times"<<endl;
}``
}
答案 3 :(得分:0)
代码段:
#include <bits/stdc++.h>
using namespace std;
int main()
{
string input, word;
getline(cin, input);
cin>>word;
int cnt=0;
size_t pos = input.find(word, 0);
while(pos != string::npos)
{
cnt++;
pos = input.find(word, pos+1);
}
cout<<cnt<<endl;
return 0;
}
输入:
Python编程Python
蟒输出:2