[英]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 ++性質非常正確和真實。
代替解析來交錯數組的讀取成vector
的vector
號第int
秒。
(或者,一系列的集合,一堆deques,無論你喜歡什么癢)。
沒有任何規格,我接受
干杯
#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.