Я уверен, что это очень простая задача, однако я очень новичок в 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];
}
}
}
}
}
Что определенно дает много ошибок. Моя проблема в том, что мне нужна какая-то функция, которая просматривает текстовый файл по одному слову (выделенному пробелами) за раз.
Какие-либо предложения?
Спасибо
Вы можете сделать это так:
Сначала определим простую функцию:
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 хорошо понимать поведение.
пусть ваш файл имеет 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)
}
я знаю, что это не матричная запись, но может помочь вам