Чтение ввода в массив динамического размера - PullRequest
3 голосов
/ 09 мая 2011

То, что я пытался сделать, это прочитать строку из стандартного ввода и разделить ее, используя пробелы в качестве разделителей.

Допустим, у меня есть это в качестве ввода:

2
1 2
3 4

Первая строка дает мне количество строк, которые я хотел бы прочитать, это все строки с целыми числами, разделенными неизвестным количеством пробелов (т.е. это может быть 1 пробел, но это также может быть 10 пробелов).
То, что я пытался сделать, - это читать эти строки в массивы динамических размеров целых чисел.

Это было чрезвычайно легко в Python:

foo = raw_input()
array = foo.split()

или даже короче:

foo = raw_input().split()

Однако из-за обстоятельств я должен изучить красоту C ++. Поэтому я попытался создать что-то похожее на приведенный выше код Python:

#include <iostream>

using namespace std;

int lines;
int *array;

int main() {
    cin >> lines;
    for (int line = 0; line < lines; line++) {
        // Something.
    }
}

Кажется, я не знаю, как разбить строку ввода. Я знаю, что std :: cin читает, пока не достигнет пробела. Однако я не могу придумать, как подсчитать количество чисел в строке ...

Было бы полезно немного подтолкнуть в правильном направлении, спасибо.

Ответы [ 2 ]

1 голос
/ 09 мая 2011

В C ++ вы можете получить доступ к символам в строке с помощью [], как если бы эта строка была массивом. Я предлагаю вам прочитать строку из cin в строку, перебрать строку с циклом for и проверить каждый символ, чтобы увидеть, является ли это пробелом. Всякий раз, когда вы найдете непробельный символ, сохраните его в своем массиве.

1 голос
/ 09 мая 2011

, так как все, что вам нужно, это подталкивание, вот пара подсказок ..

std::getline() - позволяет читать из потока в std::string.

Затем вы можете создать std::istringstream, используя эту строку, которую вы только что прочитали. Затем используйте этот поток для чтения ваших целых чисел

, например:

std::string line;
if(std::getline(std::cin, line))
{
  std::istringstream str(line);
  int lc;

  if (str >> lc) // now you have the line count..
  {
    // now use the same technique above
  }
}

о, а для вашего "динамически изменяемого массива" вам нужно посмотреть std::vector<>

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