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

时间:2015-03-19 15:29:49

标签: c++

我有一项任务是找到通过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++;
}

3 个答案:

答案 0 :(得分:1)

假设

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;
        }

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

答案 1 :(得分:1)

这是您在应用程序(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;
}

答案 2 :(得分: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;
        }