簡體   English   中英

使用C ++將不規則文件讀入二維數組

[英]read irregular file into a 2-dimension array using C++

我是C ++的新手。 我相信stackoverflow中已經有解決方案,但我找不到任何解決方案。

我需要將txt文件中的數據讀入2維數組。 文件就像

54 3 5 678

10 1 2 3 46 8 1 1 2 3 4

9 8 10

每行最多包含120個整數,不超過60行。

您的回復非常感謝。 謝謝!

更新: 這不是功課 謝謝你們!

開始...

絕對是你需要的答案1 ,盡管對C ++性質非常正確和真實。

代替解析來交錯數組的讀取成vectorvector號第int秒。
(或者,一系列的集合,一堆deques,無論你喜歡什么癢)。

沒有任何規格,我接受

  • 任意數量的行(直到第一個空行),
  • 任何行上任意數字(> 0)的數字
  • 忽略任何地方的空白(除了行結束)
  • 任何整數(包括負數......)

干杯

#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/support_istream_iterator.hpp>
#include <boost/spirit/include/karma.hpp>

namespace spirit = boost::spirit;
namespace qi     = boost::spirit::qi;
namespace karma  = boost::spirit::karma;

int main()
{
    std::cin.unsetf(std::ios::skipws);
    spirit::istream_iterator b(std::cin), e;

    std::vector<std::vector<int> > vectors;

    if (qi::phrase_parse(b, e, +qi::int_ % qi::eol, qi::space - qi::eol, vectors))
        std::cout 
            << karma::format(karma::right_align(8)[karma::auto_] % ',' % '\n', vectors)
            << std::endl;

    return 0;
}

對於顯示的輸入,它打印:

  54,       3,       5,     678
  10,       1,       2,       3,      46,       8,       1,       1,       2,       3,       4
   9,       8,      10

更新標准庫版本

在此處觀看: http//ideone.com/HtAAg

為了好玩,這里是標准庫的版本。 只是為了表明,當你沒有噴氣推進庫時,事情並不是那么糟糕:)

#include <vector>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <iterator>

static void display(const std::vector<int>& v)
{
    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, ",\t"));
    std::cout << std::endl;
}

int main()
{
    std::vector<std::vector<int> > vectors;

    std::string s;
    while (std::getline(std::cin, s))
    {
        std::istringstream iss(s);
        vectors.push_back(std::vector<int>());
        std::copy(std::istream_iterator<int>(iss), std::istream_iterator<int>(), std::back_inserter(vectors.back()));
    }

    std::for_each(vectors.begin(), vectors.end(), display);
    return 0;
}

1 我假設這是作業。 我還假設你的老師要你分配一個int[120][60]int[60][120] (你怎么知道每行讀取了多少個數字? - 你需要額外的存儲空間)

我的解決方案,只需用你的文件流替換cin

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main(int argc, char* argv[]) {
    string line;
    int ints[60][120] = {0}, i = 0;
    stringstream ss;

    while (getline(cin, line)) {
        ss.str(line);

        for(int j = 0; j < 120 && ss; j++) {
            ss >> ints[i][j];
        }

        ss.clear();
        i++;
    }

    cin.ignore();
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM