Как читать разделенный пробелом ввод в C ++ Когда мы не знаем номер ввода - PullRequest
0 голосов
/ 22 февраля 2020

Я прочитал данные, как показано ниже мы не знаем, как их разделить. эта строка содержит строку и целые числа.

1 Ответ

1 голос
/ 22 февраля 2020

Вот один пример, в котором используются operator>> и std::string:

int x;
std::string name;
int y;
int quantity;
std::cin >> quantity;
for (int i = 0; i < quantity; ++i)
{
    std::cin >> x;
    std::cin >> name;
    std::cin >> y;
}

Вышеприведенное будет работать для всех строк, которые имеют 3 поля, но не для строк без последнего поля. Итак, нам нужно дополнить алгоритм:

std::string text_line;
for (i = 0; i < quantity; ++i)
{
    std::getline(std::cin, text_line); // Read in the line of text
    std::istringstream  text_stream(text_line);
    text_line >> x;
    text_line >> name;
    // The following statement will place the text_stream into an error state if
    // there is no 3rd field, but the text_stream is not used anymore.
    text_line >> y;
}

Причина root в том, что пропущенные 3-ий элементы поля приведут к тому, что первый пример будет не синхронизирован c, поскольку он будет читать 1-й столбец следующей строки для 3-го поля.

Второй пример кода вносит исправление, считывая строку за раз. Операции ввода ограничены текстовой строкой и не будут проходить go за текстовой строкой.

...