[英]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和remove_if算法以很好地了解行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.