我是C ++的新手。我相信stackoverflow中已有解决方案,但我找不到任何解决方案。
我需要将txt文件中的数据读入2维数组。文件就像
54 3 5 678
10 1 2 3 46 8 1 1 2 3 4
9 8 10
每行最多包含120个整数,且不超过60行。
您的回复非常感谢。谢谢!
更新:这不是功课。谢谢大家!
答案 0 :(得分:4)
这里......
肯定是你需要的答案 1 ,尽管对C ++性质非常正确和真实。
而不是解析为锯齿状数组,而是读取vector
vector
个int
个#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;
}
个
(或者,一系列的集合,一堆deques,无论你喜欢什么痒)。
没有任何规格,我接受
干杯
54, 3, 5, 678
10, 1, 2, 3, 46, 8, 1, 1, 2, 3, 4
9, 8, 10
对于显示的输入,它会打印:
<子> 子>
#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;
}
现场观看: http://ideone.com/HtAAg
为了好玩,这里是标准库的版本。只是为了表明,当你没有喷气推进库时,事情并不是那么糟糕:)
int[120][60]
1 我假设这是作业。我还假设你的老师要你分配一个int[60][120]
或{{1}}(你怎么知道每行读取多少个数字? - 你需要额外的存储空间) < / p>
答案 1 :(得分:0)
我的解决方案,只需用你的文件流替换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;
}