Вопрос Noob: Попытка подвергнуть цензуре определенные слова в векторе - PullRequest
0 голосов
/ 12 июля 2019

Я новичок и нахожусь на главе 4 этой книги c ++, и я не могу ответить на это задание правильно.

Код, который имеет смысл для меня, но не работает, приведен ниже.

Вот назначение:

Напишите программу, которая «выдает» слова, которые вам не нравятся; то есть вы читаете словами cin и снова печатаете их на cout. Если слово входит в число определенных вами, вы выпиши BLEEP вместо этого слова. Начните с одного «не понравившегося слова», такого как строка disliked = «брокколи»; Когда это сработает, добавьте еще несколько.

Помощь будет принята с благодарностью, я даже могу послать вам печенье.

int main() {

vector<string> words;

for (string temp; cin >> temp; )

    words.push_back(temp);

string disliked = "broccoli";

for (int i = 0; i < words.size(); ++i)

    if (words[i] == disliked ||  disliked=="Bleep!")

        cout << words[i] << "\n";

Даже если я наберу несколько слов, все, что я получаю по иронии судьбы, это «брокколи» и ничего больше.

Ответы [ 2 ]

4 голосов
/ 12 июля 2019

Причина, по которой он печатает только "брокколи", заключается в следующем:

    if (words[i] == disliked ||  disliked=="Bleep!")

        cout << words[i] << "\n";

Эти строки по сути означают «если слово равно брокколи, распечатайте это слово». Вторая часть проверки, disliked == "Bleep!", всегда ложна (потому что disliked всегда "брокколи"), поэтому она не играет роли.

Мы можем исправить такие вещи:

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

int main()
{

    vector<string> words;

    for (string temp; cin >> temp;)

        words.push_back(temp);

    string disliked = "broccoli";

    for (int i = 0; i < words.size(); ++i)

        if (words[i] == disliked)

            cout << "Bleep!" << '\n';
        else 
            cout << words[i] << '\n'; 
}

Здесь логика такова: «Если слово не нравится, выведите« Bleep », в противном случае выведите слово».

Если у вас есть еще вопросы, я с удовольствием на них отвечу, и любые cookie-файлы обязательно будут оценены! :)

1 голос
/ 12 июля 2019

То, что Джастин сказал, правда. Отладчик может показать вам, что именно происходит, следуя построчно, что происходит (вашей программы недостаточно для этого).

Однако я отвечу. Здесь проблема исходит от линии

if (words[i] == disliked ||  disliked=="Bleep!")

Вы проверяете, не нравится ли вам это слово, и показываете его. Так что да, есть только брокколи. Кстати, вы точно не следуете тому, что говорится в вашем упражнении, так как вы должны слышать, когда слово не нравится, и если нет, то и слово. (согласно тому, что я понимаю).

Надеюсь, это поможет.

...