在向量中搜索C++字符串s中的单词

Searching for a word in C++ string s in vectors

本文关键字:字符串 单词 C++ 向量 搜索      更新时间:2023-10-16

我有一项任务,要找到通过cmd行arg传递到c++程序中的单词,这些单词存储在某些文本的向量中,其中每行文本都是向量中的一个新项目。我唯一的问题是实际的搜索。这是我的搜索代码。它要么根本不起作用,要么锁住、崩溃和烧伤。

while (i < size)
{
    line = inputText[i];
    for (int k = 0; k < kwSize; k++)
    {
        if (line.find(keyWords[k]) != std::string::npos)
        {
            cout << "Success" << keyWords[k];
        }
    }
    i++;
}

假设

std::vector<std::string> inputText;
std::vector<std::string> keyWords;

如果你需要在任何一行中找到任何关键字,这是一种更干净的方法:

for (auto line = inputText.begin(); line != inputText.end(); ++line)
    for (auto word = keyWords.begin(); word != keyWords.end(); ++word)
        if (line->find(*word) != std::string::npos)
        {
            cout << "Success" << *word;
        }

只要矢量没有以某种方式损坏,就不应该崩溃。

以下是构建在一个可以工作的应用程序(VS)中的代码。

#include <string>
#include <iostream>
using namespace std;
const int size = 5;
string keyWords[size] = {"one", "two", "three", "four", "six"};
string inputText[size] = 
{
    "This is one test",
    "This is two test",
    "This is three test",
    "This is four test",
    "This is five test"
};
int _tmain(int argc, _TCHAR* argv[])
{
    int i = 0;
    string line;
    while (i < size)
    {
        line = inputText[i];
        for (int k = 0; k < size; k++)
        {
            if (line.find(keyWords[k]) != std::string::npos)
            {
                cout << "Success" << keyWords[k];
            }
        }
        i++;
    }
    char inchar;
    cin >>  inchar;
    return 0;
}

假设

std::vector<std::string> inputText;
std::vector<std::string> keyWords;

使用C++11,您还可以编写以下

for (const auto& line : inputText)
    for (const auto& word : keyWords)
        if (line.find(word) != std::string::npos)
        {
            cout << "Success" << word << endl;
        }