【问题标题】:C++ reading in a matrix-style text file into a 2D array, keeping only numerical blocksC++ 将矩阵样式的文本文件读入二维数组,仅保留数字块
【发布时间】:2015-06-04 20:20:42
【问题描述】:

我确信这是一个非常简单的任务,但是我是 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 文件中的一个单词(由空格分隔)。

有什么建议吗?

谢谢

【问题讨论】:

    标签: c++ arrays digit


    【解决方案1】:

    你可以这样做:

    先定义一个简单的函数:

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

    【讨论】:

    • 为什么不在 while 循环之后测试 line.size() = 14 然后才 push_back 而不是总是添加,然后在最后测试和删除?
    • 谢谢!我终于按照你的建议让它工作了,谢谢!
    • @user4581301:它是为了模块化。通过这个实现,很容易改变容器,或者改变被移除行的约束。但是循环内的解决方案也是正确的。其实我在std::remove_if的调用中犯了一个错误,现在已经更正了。
    【解决方案2】:

    让你的文件每行有 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)
    }
    

    我知道它不是矩阵符号,但可以帮助你

    【讨论】:

      猜你喜欢
      • 2020-07-08
      • 2013-03-13
      • 2019-03-24
      • 1970-01-01
      • 2013-03-11
      • 2017-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多