Как создать массив, прочитав файл на c ++, если каждая строка содержит целое число? - PullRequest
0 голосов
/ 01 августа 2020

В C ++ я должен прочитать файл, в котором каждая строка содержит целое число, и передать каждое целое число в массив. Я пробовал подсчитывать строки с помощью функции getline (). И создал массив, однако, когда я считаю строки, он потребляет, и если я снова использую функцию getline (), это не сработает. Что я должен делать? Спасибо.

ifstream inFile( fileName );
if ( inFile.is_open() ) {
    int size = 0;
    string line;
    while( getline(inFile, line)) 
         size++;
    int* array = new int [ size ];
    while ( getline( inFile, line )) {
         ....
    }
}
The code does not enter the second while.

Ответы [ 3 ]

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

вы можете прочитать файл в строку, а затем работать со строкой вместо файла

std::ifstream t("file.txt");
std::stringstream buffer;
buffer << t.rdbuf();
std::string stringOfNumbers = buffer.str();

и оттуда разделить строку символами новой строки, проанализировать разделенные строки как целые

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

Сбросить fstream до секунды, пока l oop

inFile.clear();
inFile.seekg(0, std::ios::beg);
while ( getline( inFile, line )) {
....
0 голосов
/ 01 августа 2020

Когда этот l oop завершится:

while( getline(inFile, line)) 
    // ...

поток inFile исчерпан, и больше нет данных для чтения из него.

Один из вариантов - открыть файл снова, а затем прочтите его. Однако это расточительно, поскольку вы можете отслеживать числа, которые читаете из файла в первый раз:

std::vector<int> v;
int i;
while (inFile >> i)
  v.push_back(i);

Теперь у вас есть все числа в контейнере, и вам не нужно читать из файла снова.

Обратите внимание, что я использую std::vector вместо массива, так как с ним намного проще работать.

Если вы обязательно используйте массив, затем вы можете прочитать файл один раз, чтобы выяснить, сколько целых чисел находится в файле:

int i, count = 0;
while (inFile >> i);

, а затем выделить память для массива:

int *array = new int[count];

, а затем открыть файл снова и считываем в массив:

int i = 0;
while (inFile >> array[i++]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...