我试图编写一个代码,将在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)

除非trueuserInput开头,否则它将始终为"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]
}

09-08 10:29