C++ 将矩阵式文本文件读入二维数组,只保留数字块
C++ reading in a matrix-style text file into a 2D array, keeping only numerical blocks
我确信这是一个非常简单的任务,但是我对 C++ 还是个新手,所以这对我来说有点棘手..
无论如何,我有一个文本文件,它已经是 25x14 数组的形式(或者在我弄清楚代码后更大)。不幸的是,有些行只有一个条目,这是一个词。
我想做的是遍历文本文件并将每个条目(不包括带有单词的行)映射到 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];
}
}
}
}
}
这肯定会给出很多错误。我的问题是我需要一些函数来一次查看 txt 文件中的一个单词(由空格划定)。
有什么建议吗?
谢谢
让你的文件每行有 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)
}
我知道它不是矩阵表示法,但可能会对你有所帮助
你可以这样做:
首先定义一个简单的函数:
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);
请参阅 vector, istringstream and remove_if algorithm 以更好地理解该行为。
我确信这是一个非常简单的任务,但是我对 C++ 还是个新手,所以这对我来说有点棘手..
无论如何,我有一个文本文件,它已经是 25x14 数组的形式(或者在我弄清楚代码后更大)。不幸的是,有些行只有一个条目,这是一个词。
我想做的是遍历文本文件并将每个条目(不包括带有单词的行)映射到 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];
}
}
}
}
}
这肯定会给出很多错误。我的问题是我需要一些函数来一次查看 txt 文件中的一个单词(由空格划定)。
有什么建议吗?
谢谢
让你的文件每行有 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)
}
我知道它不是矩阵表示法,但可能会对你有所帮助
你可以这样做:
首先定义一个简单的函数:
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);
请参阅 vector, istringstream and remove_if algorithm 以更好地理解该行为。