Завершить ввод строки в векторе l oop C ++ - PullRequest
0 голосов
/ 01 августа 2020

Есть упражнение, которое динамически запрашивает ввод данных пользователем и сохраняет его в векторе, но я не знаю, как завершить ввод строки. В книге написано Ctrl + Z , но это не работает. Я использую Visual Studio 2019, и я знаю, что это должно работать, потому что, когда я меняю переменные для целых чисел, это происходит.

int main(void) {
    std::vector<std::string> words;

    for (std::string palabras; std::cin >> palabras;)
        words.push_back(palabras);

    std::string ban = "broccoli";

    for (std::string x : words)
        if (x == ban) std::cout << "Bleep!" << '\n';
        else std::cout << x << '\n';
}

Ответы [ 2 ]

0 голосов
/ 01 августа 2020

Воспользуйтесь помощью std::istringstream и сделайте жизнь проще (обратите внимание на комментарии):

#include <iostream>
#include <string>
#include <sstream>
#include <vector>

int main(void) {
    // To store the entire line of input
    std::string input;
    // To store the split words
    std::vector<std::string> words;
    // Temporary variable to iterate through
    std::string temp;
    // Constant string to be used
    const std::string ban = "broccoli";

    std::cout << "Enter some words: ";
    std::getline(std::cin, input);

    // Here we go
    std::istringstream iss(input);

    // Separating each words space, e.g. apple <sp> banana => vector apple|banana
    while (iss >> temp)
        words.push_back(temp);

    // Using reference as for-each
    for (auto& i : words)
        if (i == ban) i = "bleep!";

    // Printing the modified vector
    for (auto& i : words) std::cout << i << ' ';

    std::cout << std::endl;

    return 0;
}
0 голосов
/ 01 августа 2020

Будьте проще: не используйте возвращаемое значение std::cin в качестве условия for l oop, если вы не уверены, чего ожидать. Вот простая программа, которая делает то, что вы хотите без , используя al oop. Было бы неплохо заставить эту работу внутри al oop.

#include <iostream>
#include <string>
int main(int argc, char **argv)
{
    std::string lovely_str;
    std::cout << "Enter a string: ";
    std::cin >> lovely_str;
    std::cout << "got: " << lovely_str << "\n";
    return 0;
}

Если вы настаиваете на использовании своей исходной программы, вы можете использовать ctrl+d, чтобы обозначить конец читать строки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...