Чтение C ++ из текстового файла в матричном стиле в двумерный массив с сохранением только числовых блоков

Я уверен, что это очень простая задача, однако я очень новичок в C ++, так что это немного сложнее для меня ..

Во всяком случае, у меня есть текстовый файл, который уже находится в виде массива 25×14 (или больше, когда я получу код выяснил). К сожалению, некоторые строки имеют только одну запись, которая является словом.

То, что я хочу сделать, — это перемещаться по текстовому файлу и отображать каждую запись (исключая строки со словом на них) в простой массив на C ++, чтобы я мог создавать гистограммы и т. Д.

Я планирую сделать это с помощью функции isdigit ().

вот что у меня так далеко:

using namespace std;

int main()
{
int str;
int matrix[25][14];

ifstream inFile("inputfile.txt");

while (inFile >> str) {
for (int i = 0; i < 25; i++) {
for (int j = 0; j < 14; j++) {
if (isdigit(inFile)) {
inFile >> matrix[i][j];
}
}
}
}
}

Что определенно дает много ошибок. Моя проблема в том, что мне нужна какая-то функция, которая просматривает текстовый файл по одному слову (выделенному пробелами) за раз.

Какие-либо предложения?

Спасибо

0

Решение

Вы можете сделать это так:

Сначала определим простую функцию:

bool is_a_bad_line(const std::vector<int>& l)
{
return l.size() < 14;
}

Затем :

std::vector< std::vector<int> > data;
std::ifstream f("inputfile.txt");
std::string line;
while(std::getline(f,line))
{
std::vector<int> line_data;
std::istringstream iss(line);
int value;
while(iss >> value)
line_data.push_back(value);
data.push_back(line_data);
}
std::remove_if(data.begin(), data.end(), is_bad_line);

Увидеть вектор, istringstream а также алгоритм remove_if хорошо понимать поведение.

0

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

пусть ваш файл имеет 2 номера в каждой строке

1 2
2 3
4 5

std :: istringstream получит числа и сохранит их в переменной

#include <sstream>
#include <string>

std::string line;
while (std::getline(infile, line))
{
std::istringstream iss(line);
int a, b;
if (!(iss >> a >> b)) { break; } // error

// process pair (a,b)
}

я знаю, что это не матричная запись, но может помочь вам

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector