如何使用string :: find()?

时间:2019-04-05 18:27:18

标签: c++

  

如果userInput包含单词“ darn”,则打印“ Censored”,否则打印userInput。以换行符结尾。提示:如果未找到要搜索的项目,则find()返回string :: npos。

     

注意:这些活动可能会使用不同的测试值来测试代码。此活动将执行三个测试,使用userInput输入“那只该死的猫。”,然后输入“当当,那太可怕了!”,然后输入“我正在织袜子”。

这是我尝试的代码。我真的不确定还有什么尝试。

#include <iostream>
#include <string>
using namespace std;

int main() {
   string userInput;

   userInput = "That darn cat.";

   if (userInput.find("darn")) {
      cout << "Censored" << endl;
   }

   else {
      cout << userInput << endl; 
   }

   return 0;
}
如果

userInput包含Censored,应产生"darn"。否则,它应该打印userInput

我的结果是每次输入Censored

1 个答案:

答案 0 :(得分:1)

您没有按照您的指示进行操作。

具体来说,您缺少以下条件的代码:

  •   

    提示:如果未找到要搜索的项目,则find()返回string :: npos。

    您没有检查find()的返回值npos(定义为string::size_type(-1))。

    find()为找到的子字符串的 index 返回一个数值,如果找不到则返回npos

    语句if (userInput.find("darn"))正在检查零索引值与非零索引值。在所有三个测试用例中,find()不会返回索引0,因此任何非零值都将导致if语句的求值为true,而"Censored"块将为输入。

  •   

    此活动将执行三个测试,其中userInput为“那只该死的猫。”,然后为“当当,那太吓人了!”,然后是“我在给你的袜子打毛”。

    您仅执行第一个测试,而不执行其他测试。

尝试以下方法:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string userInput;

    userInput = "That darn cat.";

    if (userInput.find("darn") != string::npos) {
        cout << "Censored" << endl;
    }
    else {
        cout << userInput << endl;
    }

    userInput = "Dang, that was scary!";

    if (userInput.find("darn") != string::npos) {
        cout << "Censored" << endl;
    }
    else {
        cout << userInput << endl;
    }

    userInput = "I'm darning your socks.";

    if (userInput.find("darn") != string::npos) {
        cout << "Censored" << endl;
    }
    else {
        cout << userInput << endl;
    }

    return 0;
}

然后可以使用可重用的函数将其重写:

#include <iostream>
#include <string>
using namespace std;

void checkInput(const string &input) {
    if (input.find("darn") != string::npos) {
        cout << "Censored" << endl;
    }
    else {
        cout << input << endl;
    }
}

int main() {
    string userInput;

    userInput = "That darn cat.";
    checkInput(userInput);

    userInput = "Dang, that was scary!";
    checkInput(userInput);

    userInput = "I'm darning your socks.";
    checkInput(userInput);

    return 0;
}