C++ 在句子中查找单词

标签 c++ string find words

我的任务是在句子中查找单词“EYE”(更像是一行字符),例如:EYEYECARASDFG。正如您所看到的,“EYE”一词出现了两次,彼此重叠。我想计算句子中“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 循环的括号中放入什么

最佳答案

首先需要 while 中的条件。如果您想要无限循环,请使用 true 作为您的语句。作为初稿,尝试用“蛮力”来完成。只需检查句子中每 3 个字母的子串是否等于“EYE”。它将是 1 个循环和 3 个条件,或者 2 个循环和 1 个条件。然后阅读一些文本搜索算法,例如 KMP

如果您只想让此代码运行,请使用以下代码:

int pos = 0;
while(true) { 
    pos =  sentence.find("EYE", ++pos);
    if (pos != std::string::npos) {
        i++;
    } else break;
 }

关于C++ 在句子中查找单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13565907/

相关文章:

php - 用于从数组中 checkin 字符串的八进制

c++ - C++ 中两个字符串之间匹配的字符数

Java在集合中找到最接近(或相等)的值

c++ - 为 C++ 提供标准 GUI 库的缺点是什么?

c++ - 使用 lambda 作为异步回调

c++ - Unresolved external symbol 错误将 DLL 链接到 LIB

c++ - 子弹只杀死第一个敌人

c - 释放 char 指针时获取 SIGABRT

c++ unordered_set .find 方法无法编译,给出 "expression must have class type"错误

linux - 使用 find 命令删除目录集,而不会遇到参数列表太长的情况