使用C ++将文件中的间隔整数读入数组

时间:2015-01-27 05:39:37

标签: c++ arrays string file

我一直在试图解决这个问题。 我试图从文件中读取一行整数,它们看起来像这样:

20 4 19 1 45 32
34 23 5 2 7

所有数字都在1到100之间,并以空格分隔。我想将每个整数存储为一个数组,该数组将被送入合并排序,但我不知道如何从字符串中取出每个整数。任何帮助表示赞赏。 谢谢!

3 个答案:

答案 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中存储的行中的所有整数。

顺便说一下,流迭代器有一些很好的技巧(参见其他答案)可以使这段代码更简单一些。但是,我喜欢这种风格 - 以后很容易适应更复杂的行格式,并且添加错误检查更容易。