所以我正在查看一个字符串,看看它是否包含一个出现在数组中的元素。然后我想输出数组中与字符串中的元素匹配的元素。如果字符串包含数组中的两个或更多元素,那么它将输出它包含的数组中的所有元素。当我执行输出部分时,它只输出数组中的第一个元素,无论数组中的哪个元素与字符串中的某些元素匹配。我的代码在下面,如果你能帮助我理解我做错了什么,我将非常感激!
string nouns[] = { "MAILBOX", "KNIFE", "TROLL", "THIEF", "LETTER", "OPPONENT" };
string command = "THE LETTER IS IN THE MAILBOX.";
//check if each command has one of the nouns
for (int j = 0; j < 6; j++){
if (command.find(nouns[j])){
string foundnound = nouns[j];
cout << "The noun is: " << foundnound << endl;
break;
}
}
答案 0 :(得分:2)
问题在于这一行:
if (command.find(nouns[j]))
也就是说,只要find()
的返回值不是0
,就执行if语句中的代码。
如果未找到匹配项,find
将返回size_t的最大值,该值不为零。
查看find
功能的参考。
std::find
答案 1 :(得分:0)
由于您按顺序搜索名词,如果输入包含MAILBOX,它将返回该名称,无论它在命令中出现在何处。如果要在命令中打印与名词之一匹配的第一个单词,则需要将命令拆分为单词,然后迭代这些单词,查看命令中的单词是否在名词列表中。
答案 2 :(得分:0)
c++11
(当然不是最佳,但很小):
#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>
using std::string;
int main() {
string nouns[] = {"MAILBOX", "KNIFE", "TROLL", "THIEF", "LETTER", "OPPONENT"};
string command = "THE LETTER IS IN THE MAILBOX.";
std::copy_if(std::begin(nouns), std::end(nouns),
std::ostream_iterator<string>(std::cout, "\n"),
[&command](const std::string &noun) {
return command.find(noun) != std::string::npos;
});
}