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