Как построчно ввести целые числа ?(с++)

350
18 января 2018, 21:10

На вход даются целые числа. На каждой строке находится какое-то количество этих целых чисел (может и вообще их не быть). Мне нужно переместить целые числа в i-й строке в массив с номером i. Пример:

4 //количество строк 2 3 //числа которые должны попасть в 1 массив 3 //число которое должно попасть во 2 массив //3-й массив должен остаться пустым 2 //в 4-й массив соответственно должно попасть число на 4 строчке

Можно ли считать данные без использования string и char[] и если да, то как?

Answer 1

Нет. Поскольку у вас количество чисел в строке не фиксировано, вам нужно считывать строки целиком, а затем их обрабатывать. Например, что-то типа (набросок, не более того)

in >> N;
for(int i = 1; i <= N; ++i)
{
    getline(in,s);
    istringstream is(s);
    while(is >> n) { /* Вносим n в i-й массив */ };
}
Answer 2

Да. Например при помощи std::istream::peek() вы можете подсмотреть какой следующий символ в потоке не извлекая его, и если там конец строки, то считать что эта строка закончилась и переходить к следующей. Но такой подход создает дополнительные трудности. Если вы избегайте строк потому что не знакомы с ними, то лучше познакомьтесь, если это такое задание, то у вас очень коварный учебник/преподаватель/интервьюер.

Решение без строк, но с ошибками(если пользователь введет пробелы в конце строки):

#include <iostream>
#include <vector>
#include <limits>
int readInt(){
    int value;
    std::cin >> value;
    return value;
}
bool isEndOfLine(){    
    int next = std::cin.peek();
    return next == '\n' || next == EOF;
}
void skipLine(){
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}

int main(){
    int size;
    std::cin >> size;
    skipLine();
    std::vector<std::vector<int> > data(size);
    for(int i = 0; i < size; ++i){
        while(!isEndOfLine()){
            data[i].push_back(readInt());
        }
        skipLine();
    }
    //...
}

http://cpp.sh/7fhsy

Для хранения данных использовал вектора, потому что с ними проще управляться чем с массивами, но на суть решения это не повлияло.

READ ALSO
Использование QtWebEngine для создания парсера html

Использование QtWebEngine для создания парсера html

С недавнего времени в Qt отсутствует QtWebKit, заменен он на QtWebEngine, по которому очень сложно откопать инфуПриведите небольшой пример запроса...

298
Перетаскивания QWidget с именем в QMainWindow

Перетаскивания QWidget с именем в QMainWindow

Создал тестовое приложение для обучения Qt и его некоторым основам

254
Двоеточие в определении конструктора

Двоеточие в определении конструктора

У меня возникла проблема с пониманием синтаксисаУвидел вот такой конструктор:

293
Проблема с DLL библиотеками QT

Проблема с DLL библиотеками QT

Здравствуйте, работай со средой разработки QT, написав некоторый базовый функционал приложения, решил собрать ее и перенести на другой компьютер,...

253