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 以更好地理解该行为。