我有一个包含多行的文本文件,每行包含两个非常大的整数。
我需要读取行上的第一个整数,将每个数字存储在一个int数组中,读取该行的第二个整数,将其中的每个数字存储在另一个int数组中。然后我应该执行一些操作(添加它们,将它们相乘等),然后在文本文件中重复第二行的过程,依此类推。
我不知道如何以这种方式读取整数。我只能将一个整数作为一个数组读取,但我不知道如何区分由空格分隔的整数,更不用说如何告诉编译器何时切换该行。
我不能将整数作为int变量读取的原因是,正如我所说的那样,它们对于常见的数值运算来说太大了,所以我必须按照我手工操作的方式来完成它们。我编写了复制过程的函数,但它们需要数组。
我尝试使用fscanf
或getline
,但类似的任何内容都会读取单个数组中的整数。此外,在遇到空格之前读取的任何内容都将读取我的所有数字,而不仅仅是我所在的数字。
理想情况是两个数组,每个数组包含一个整数的数字,每次切换线时都会重新初始化。
任何关于如何做到这一点的建议(或采用不同方法做同样的想法)都将受到赞赏。
答案 0 :(得分:0)
使用boost库(用于字符串拆分功能的算法和用于转换的词法转换),您可以查看此代码片段 - (无需验证)
typedef std::vector<int> intarray;
intarray da[2];
std::string s;
std::fstream f(filename,std::ios::in);
while(!f.eof() && !f.fail())
{
std::getline(f, s );
std::vector<std::string> v;
boost::algorithm::split(v, s, boost::algorithm::is_any_of(" "));
for(int j = 0; j<1; ++j)
{
std::string fs = v.at(j);
for(int i = 0; i<fs.size(); ++i)
{
try
{
int d = boost::lexical_cast<int>(fs.at(i));
da[j].push_back(d);
}
catch(bad_lexical_cast& e)
{
std::cout << "caught exception.\n";
break;
}
}
}
}