我试图编写一个代码,将在userInput中搜索单词“darn”,如果找到,则打印出“Censored”。如果找不到,它将只打印出userInput。它在某些情况下有效,但在其他情况下则无效。如果userInput是“那个该死的猫!”,它将打印出“被检查”。但是,如果userInput是“Dang,那太可怕了!”,它也会打印出“Censored”。我正在尝试使用find()搜索字符串文字“darn”(空格是因为它应该能够在单词“darn”和“darning”之类的单词之间进行确定。我不必担心“darn”之后的标点符号”)。但是,好像find()并没有做我想要的事情。还有另一种方法可以搜索字符串文字吗?我尝试使用substr(),但无法弄清楚索引和len应该是什么。
#include <iostream>
#include <string>
using namespace std;
int main() {
string userInput;
userInput = "That darn cat.";
if (userInput.find("darn ") > 0){
cout << "Censored" << endl;
}
else {
cout << userInput << endl;
} //userText.substr(0, 7)
return 0;
}
最佳答案
这里的问题是您的状况。 std::string::find
返回std::string::size_type
的对象,它是无符号整数类型。这意味着它永远不能小于0,这意味着
if (userInput.find("darn ") > 0)
除非
true
以userInput
开头,否则它将始终为"darn "
。因此,如果find
未找到任何内容,则返回std::string::npos
。您需要做的是与类似的比较if (userInput.find("darn ") != std::string::npos)
请注意,
userInput.find("darn ")
在所有情况下均不起作用。如果userInput
只是"darn"
或"Darn"
,则它将不匹配。该空间需要作为单独的元素进行处理。例如:std::string::size_type position = userInput.find("darn");
if (position != std::string::npos) {
// now you can check which character is at userInput[position + 4]
}