C ++在句子中查找单词

时间:2012-11-26 13:33:07

标签: c++ string find words

我有一个任务是在一个句子中找到“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循环的括号中

4 个答案:

答案 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