所以我发现自己在尝试制作解决此练习的程序时陷入困境:
编写一个程序,“淹没”你不喜欢的单词;那是, 你用cin阅读单词并在cout上再次打印它们。如果一个词是 在你定义的几个中,你写出了BLEEP而不是那个 字。
我尝试使用嵌套for循环确实正常工作,问题似乎与else if
int main() {
std::vector<std::string> disliked = { "fuck", "cunt", "bitch", "motherfucker", "shit"};
std::vector<std::string> input;
for (std::string forInput; std::cin >> forInput;) {
input.push_back(forInput);
}
for (int i = 0; i < input.size(); ++i) {
for (int x = 0; x < disliked.size(); ++x) {
if (input[i] == disliked[x]) {
std::cout << "*beep*\n";
x = disliked.size();
}
else if (x == (input.size()) && input[i] != disliked[x]) {
std::cout << input[i] << std::endl;
}
}
}
std::cin.ignore();
std::cin.get();
return 0;
}
这部分
else if (x == (input.size()) && input[i] != disliked[x]) {
std::cout << input[i] << std::endl;
}
很可能是困扰我的东西,但它的逻辑似乎是正确的。 如果第一个&#34;如果&#34;是假的然后它会转到下一个,&#34;否则如果&#34;,如果两个&#34;否则如果&#34;参数是真的然后它应该输出我想要的,但它不起作用。
我真的很感激一些帮助和解释。 提前谢谢。
答案 0 :(得分:0)
else if (x == (input.size()) && input[i] != disliked[x])
我不确定我是否理解您正在尝试使用该测试,但似乎它不会执行与您的任务相关的任何操作。为什么要将x
(这是顽皮单词列表的索引)与输入数据的大小进行比较?也许你打算做这样的事情:
else if (x == (disliked.size() - 1))
那将检查你是否在不喜欢列表的最后一个单词,在这种情况下,可以假设输入单词不在其上。
就我个人而言,我认为如果将输出与测试循环分开并使用bool来确定要打印的内容会更清晰。像这样:
for (int i = 0; i < input.size(); ++i) {
bool is_naughty = false;
for (int x = 0; x < disliked.size(); ++x) {
if (input[i] == disliked[x]) {
is_naughty = true;
break;
}
}
if (is_naughty)
std::cout << "*beep*\n";
else
std::cout << input[i] << std::endl;
}
答案 1 :(得分:0)
你是否有理由将矢量用于不喜欢的字符串?看起来像一个集合将更适合这样的事情:
std::set<string> disliked;
要查明您的单词是否在不受欢迎的集合中,请使用:
if (disliked.find(input[i]) == disliked.end()) {
// Word not in disliked set
} else {
// Word is in disliked set
}