如果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
。
答案 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;
}