如何将矢量中的数字打印到文件中?

时间:2014-04-13 08:39:46

标签: c++ file-io

//到目前为止,这是我的代码

//在这里,我简单地记录了一个包括小数字在内的多个文件

ifstream infile;
infile.open("Numbers.txt");
if (!infile) {
    cout << "Unable to open the file" << endl;
    return;
}

//创建矢量以存储这些数字

vector<int> iNumbers;
vector<double> dNumbers;

    if (infile) {
        int i;
        double d;

    while (infile >> i && infile >> d) {
        iNumbers.push_back(i);
        dNumbers.push_back(d);
    }

    infile.close();
}

/ * 现在尝试将这些数字打印或放入两个不同的文件中,将整数字放入整数.txt并将双重内容放在doubles.txt中 * /

ofstream integerOut("integer.txt");

vector<int>::iterator ii;
for (ii = iNumbers.begin(); ii != iNumbers.end(); ++ii)
{
    if (ii = int {

    }
    integerOut << *ii << endl;
    cout << *ii << endl;
}

integerOut.close();

ofstream doubleOut("double.txt");

vector<double>::iterator dd;
for (dd = dNumbers.begin(); dd != dNumbers.end(); ++dd)
{
    doubleOut << *dd << endl;
    cout << *dd << endl;
}

doubleOut.close();


}

//我的代码仅为我的integer.txt文件提供了第一个两个数字,并为我的double.txt提供了最后一个数字。我做错了什么?

进一步说明: 我有一个名为Numbers.txt的文件,其中包含数字

1

5

9.4

3

4

6.3

5

2.2

我正在使用整数并尝试将它们放入interger.txt文件中,我将双打并将它们放入double.txt文件中。但在我的代码中,我收到的是整数

1

2

9

3

4

6

5

2

当我想收到

1

5

3

4

5

1 个答案:

答案 0 :(得分:1)

您可以使用标准算法std::copy。例如

#include <iostream>
#include <fstream>
#include <iterator>
#include <algorithm>

//...

std::ofstream integerOut( "integer.txt" );

if ( integerOut ) 
{
   std::copy( iNumbers.begin(), iNumbers.end(), 
              std::ostream_iterator<int>( integerOut, " " ) );
}  


std::ofstream doubleOut( "double.txt" );

if ( doubleOut ) 
{
   std::copy( dNumbers.begin(), dNumbers.end(), 
              std::ostream_iterator<double>( doubleOut, " " ) );
}  

或者您可以编写一个代码来自己控制输出。例如

#include <iostream>
#include <fstream>

//...

std::ofstream integerOut( "integer.txt" );

for ( int x : iNumbers )
{
    if ( !( integerOut << x << ' ' ) ) break;
}


std::ofstream doubleOut( "double.txt" );

for ( double x : dNumbers )
{
    if ( !( doubleOut << x << ' ' ) ) break;
}

至于输入那么我已经理解了两个整数后跟文件中的一个双精度。所以你需要相应地阅读数字。

int i1, i2;
double d;

bool valid = true;
while ( valid ) 
{
   if ( valid = infile >> i1 ) iNumbers.push_back( i1 );
   if ( valid && ( valid = infile >> i2 ) ) iNumbers.push_back( i2 );
   if ( valid && ( valid = infile >> d ) ) dNumbers.push_back( d );
}

如果您不知道文件中的下一个数字是整数还是双数,您可以通过数字中存在句点来解除它们。例如

std::string value;

while ( infile >> value )
{
   if ( value.find( '.' ) != std::string::npos )
   {
      double d = std::stod( value );
      dNumbers.push_back( d );
   }
   else
   {
      int i = std::stoi( value );
      iNumbers.push_back( i );
   }
}