如何打印在字符串C ++中找到的数组元素

时间:2015-11-18 19:11:00

标签: c++ arrays string

所以我正在查看一个字符串,看看它是否包含一个出现在数组中的元素。然后我想输出数组中与字符串中的元素匹配的元素。如果字符串包含数组中的两个或更多元素,那么它将输出它包含的数组中的所有元素。当我执行输出部分时,它只输出数组中的第一个元素,无论数组中的哪个元素与字符串中的某些元素匹配。我的代码在下面,如果你能帮助我理解我做错了什么,我将非常感激!

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

3 个答案:

答案 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;
               });
}