簡體   English   中英

如何將矢量中的數字打印到文件上?

[英]How would I print numbers from a vector onto a file?

//到目前為止,這是我的代碼

//在這里,我僅輸入一個包含全數字的文件,其中包括十進制數字

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();
}

/ *現在嘗試將這些數字打印或放置到兩個不同的文件中,將整數放入integer.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

9.4

3

4

6.3

2.2

我正在獲取整數,並嘗試將它們放入interger.txt文件,而我正在獲取雙精度數,並將其放入double.txt文件。 但是在我的代碼中我收到整數

1

2

9

3

4

6

2

當我想收到

1

3

4

只要

您可以使用標准算法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 );
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM