繁体   English   中英

C ++将矩阵样式的文本文件读取为2D数组,仅保留数字块

[英]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);

请参阅vectoristringstreamremove_if算法以很好地了解行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM