#c
#c
Вопрос:
Выведите «Censored», если пользовательский ввод содержит слово «проклятый», иначе выведите пользовательский ввод. Заканчивать новой строкой. Подсказка: find() возвращает string::npo, если искомый элемент не найден.
Примечание: Эти действия могут тестировать код с разными тестовыми значениями. В этом упражнении будут выполнены три теста, с пользовательским вводом «Этот чертов кот»., затем с «Черт возьми, это было страшно!», затем с «Я штопаю твои носки».
Вот код, который я пробовал. Я действительно не уверен, что еще попробовать.
#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. Смотрите
std::basic_string::find
.2. Текст вопроса сообщает вам, что вы пропустили — »
find()
возвращаетstring::npos
, если искомый элемент не найден. » Вы не проверяете, против чего он возвращаетstring::npos
.
Ответ №1:
Вы не следуете инструкциям, которые вам были даны.
В частности, вам не хватает кода для этих условий:
-
Подсказка: find() возвращает string::npo, если искомый элемент не найден.
Вы не проверяете возвращаемое значение
find()
fornpos
(которое определяется какstring::size_type(-1)
).find()
возвращает числовое значение для индекса найденной подстроки илиnpos
если она не найдена.Инструкция
if (userInput.find("darn"))
проверяет нулевое или ненулевое значение индекса. Во всех трех тестовых примерахfind()
не вернет индекс 0, поэтому любое ненулевое значение приведет к тому, чтоif
оператор будет вычислен какtrue
и"Censored"
будет введен блок. -
В этом упражнении будут выполнены три теста, с пользовательским вводом «Этот чертов кот»., затем с «Черт возьми, это было страшно!», затем с «Я штопаю твои носки».
Вы выполняете только 1-й тест, но не остальные тесты.
Попробуйте это вместо:
#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 amp;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;
}