Чтение списка целых чисел в одной строке ввода в C ++ - PullRequest
2 голосов
/ 20 февраля 2012

Я пытаюсь прочитать несколько целых чисел из одной строки ввода в массив например. Ввод: 100 200 300 400, поэтому массив: a [0] = 100, a [1] = 200, a [2] = 300, a [3] = 400 Дело в том, что число целых чисел неизвестно, поэтому размер массива неизвестен.

Ответы [ 3 ]

7 голосов
/ 20 февраля 2012

Вам следует использовать контейнер, который автоматически изменяет свой размер, например std::vector.

Например, что-то вроде этого:

#include <string>
#include <iostream>
#include <sstream>
#include <utility>
#include <iterator>

std::string line;
getline(instream, line);
std::istringstream this_line(line);
std::istream_iterator<int> begin(this_line), end;
std::vector<int> values(begin, end);
3 голосов
/ 20 февраля 2012

Вы можете использовать std::vector для этого:

std::vector<int> myVector;

std::string line;
std::getline(std::cin, line);
std::istringstream os(line);

int i;
while(os >> i)
    myVector.push_back(i);

Для этого кода требуется следующее: <iostream>, <string>, <sstream> и <vector>.

1 голос
/ 20 февраля 2012

Вставщики и потоковые итераторы могут сделать это красиво:

#include <iterator>
#include <vector>
#include <iostream>
#include <algorithm>

std::vector<int> numbers;

std::copy(std::istream_iterator<int>(std::cin),
          std::istream_iterator<int>(),
          std::back_inserter(numbers));

Или, как у @Ben Voigt, построить вектор из входных данных за один раз (если это вариант):

std::vector numbers(std::istream_iterator<int>(std::cin),
                    std::istream_iterator<int>());

Вы можете заменить std::cin подходящим потоком строк, если ваши входные требования более сложные.

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