我一直在试图解决这个问题。 我试图从文件中读取一行整数,它们看起来像这样:
20 4 19 1 45 32
34 23 5 2 7
所有数字都在1到100之间,并以空格分隔。我想将每个整数存储为一个数组,该数组将被送入合并排序,但我不知道如何从字符串中取出每个整数。任何帮助表示赞赏。 谢谢!
答案 0 :(得分:1)
您可以将它们读入矢量:
std::ifstream dataFile("ints.dat");
std::istream_iterator<int> dataBegin(dataFile);
std::istream_iterator<int> dataEnd;
std::vector<int> data(dataBegin, dataEnd);
答案 1 :(得分:1)
首先,你真的不想要一个数组 - 你想要一个vector
。
其次,使用vector
和几个istream_iterator
,你可以直接从文件中读取数据到数组中,没有插入字符串(好吧,可能有一个,但如果所以它隐藏在库代码中,而不是你写的任何东西。)
// Open the file:
std::ifstream in("yourfile.txt");
// Read the space-separated numbers into the vector:
std::vector<int> { std::istream_iterator<int>(in),
std::istream_iterator<int>() };
请注意,这确实假设您要将所有文件中的数据读入int
s的单个向量。如果(例如)你只想读取第一行数据,并保持其余部分未被触及(例如,通过其他一些代码读取),你通常最终会将第一行读入字符串,然后创建一个{ {1}}这些数据,并使用上述代码从stringstream
读取数据。
答案 2 :(得分:0)
有两个步骤。这些其他答案中的一些假设您希望将整个文件读入单个向量;我假设您希望每个单独的行都在其自己的向量中。这不是完整的代码,但它应该给你正确的想法。
首先,您需要逐行阅读文件。对于每一行,使用std :: getline将其读入std :: string,其中使用ifstream打开文件本身。像这样:
ifstream in_file( "myfile.txt" );
string s;
while( in_file.good() )
{
getline( in_file, s );
if( !in_file.fail() )
{
// See below for processing each line...
}
}
鉴于你已经读过一行,你应该将它加载到std :: stringstream中,然后从该stringstream中读取整数。
vector< int > result;
stringstream ss( s );
while( ss.good() )
{
int x;
ss >> x;
if( !ss.fail() )
result.push_back( x );
}
这部分进入上面的内循环。在此代码块的末尾,result
向量将包含s
中存储的行中的所有整数。
顺便说一下,流迭代器有一些很好的技巧(参见其他答案)可以使这段代码更简单一些。但是,我喜欢这种风格 - 以后很容易适应更复杂的行格式,并且添加错误检查更容易。