getline — чтение isstringstream из файла переполнение стека

Я пытаюсь прочитать файл чисел.

Используя мой код, я читаю только первое число в каждой строке. getline () получает строку, но isstringstream читает только 1 число из строки, пренебрегая остальными. Мне нужно прочитать каждое число и вставить его в мой вектор

Пример файла:

118 115 115 116 116 116 118 117 115 114 114 115 117 118 117 114 114 116 117
116 117 117 117 116 115 115 115 115 116 118 118 117 116 114 112 112 112 114
115 ... so on

int main()
{
vector<unsigned char>gray;
int lines=2;

for (int i = 0; i < lines; i++)

{
string line4;
getline(infile, line4);
istringstream iss4(line4);
int g;
iss4 >> g;

gray.push_back((unsigned char)g);
}
return 0;
}

-1

Решение

Немного изменив свой код:

#include <cstdint> // For uint8_t

int main()
{
vector<uint8_t>gray;
unsigned int line_number = 0U;
std::string text;
while (getline(infile, text))
{
istringstream iss4(text);
uint8_t value;
while (iss4 >> value)
{
gray.push_back(value);
}
}
return 0;
}

Заметки:

  1. Istringstream может быть обработан как файл, когда извлекается больше
    чем одно значение.
  2. uint8_t тип гарантирует 8-битное целое число без знака.
0

Другие решения

Вы могли бы использовать std::istream_iterator подход; здесь показано на примере использования std::cin,

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

int main()
{
std::vector<unsigned char> gray;

std::copy(std::istream_iterator<int>{std::cin},
std::istream_iterator<int>{},
std::back_inserter(gray));

return 0;
}
0

По вопросам рекламы [email protected]