Чтение значений, разделенных табуляцией, из текстового файла в массив

Эй, я новичок в C ++, и я столкнулся с проблемой:

У меня есть текстовый файл, который выглядит так:

500

1120

10

number1,1 number1,2   ...   number1,500

number2,1

.

.

number1120,1

Таким образом, первые два значения в верхней части текстового файла описывают размеры матрицы. Теперь я хочу написать код, который считывает все файлы из матрицы в массив или вектор int ценности. Я могу прочитать первые три значения (500, 1120,10) и записать их в целочисленное значение, используя getline а также stringstream, но я не могу понять, как читать матричный кран, разделенный циклом.

0

Решение

Что-то вроде этого:

#include <iostream>
#include <sstream>

// Assume input is 12,34,56. You can use
// getline or something to read a line from
// input file.
std::string input = "12,34,56";

// Now convert the input line which is string
//  to string stream. String stream is stream of
// string just like cin and cout.
std::istringstream ss(input);
std::string token;

// Now read from stream with "," as
// delimiter and store text in token named variable.
while(std::getline(ss, token, ',')) {
std::cout << token << '\n';
}
2

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

Вы можете прочитать матрицу построчно с циклом и разбить текущую строку, используя токенизатор (например, std::strtok) или вложенный цикл, который разделяет строку в разделителях.
Есть ветка про tokenizers.

0

Спасибо за все ответы, теперь я могу читать все данные, разделенные табуляцией в массив, но, к сожалению, я столкнулся с очень утомительной проблемой. Итак, это мой код:

// Matrix deklarieren
long int** mat_dat = new long int *[m_height];
for (long int a = 0; a < m_height; ++a)
mat_dat[a] = new long int[m_width];

//ganzes Feld als String einlesen//Daten aus Textdatei lesen
long int i = 0;
long int j = 0;
long int value = 0;
while (myfile.good())
{
getline(myfile, test);
istringstream ss(test);
string token;
while (std::getline(ss, token, '\t'))
{
cout << token << '\t';
value = atoi(token.c_str());
mat_dat[j][i] = value;
i++;
}
if (j == m_depth)
{
break;
}
j++;
i = 0;

Он идеально сохраняет все данные в массиве, вот о чем я думал. Но когда я смотрю внимательно, только первые 512 значений массива верны (mat_dat [0] [512] верны) и (mat_dat [1] [512] верны. Следующие значения в строке из mat_dat [0] [ 512] до mat_dat [0] [1120] неверны. Есть ли у вас какие-либо подсказки, почему он начинает быть неправильным прямо в этом месте?

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