2009-03-24 19 views
13

標準出力にistream変数をどのように出力しますか? [EDIT]私は、ログファイルにはistreamをouputをする必要が前記私はシナリオをデバッグしようとしていますistream全体を標準出力と文字列に出力する方法

+0

それはあなたがやろうとしているが何であるかを明確にしてください。 –

+0

文字列全体を印刷したい – kal

答えて

5

これは、一度に1つの文字、全体ストリームを出力します:

char c; 
c = my_istream.get(); 
while (my_istream) 
{ 
    std::cout << c; 
    c = my_istream.get(); 
} 

これを印刷します

std::string output; 
while(my_istream >> output) 
    std::cout << output; 
12

編集:私はあなたがストリームの内容全体をコピーしたいと仮定し、いないよがちょうど単一の値全部が、空白を捨てます。 1つの単語だけを読みたい場合は、代わりに1800の答えを確認してください。


明白な解決策は、一度に単語をコピーするwhileループですが、あなたはそれに素敵なonelinerとして、より簡単な操作を行うことができます。

#include <iostream> 
#include <iterator> 

... 

std::istream i; 
std::copy(std::istream_iterator<char>(i), std::istream_iterator<char>(), std::ostream_iterator<char>(std::cout)); 

stream_iteratorsは、オペレータ< <を使用して>>内部的には、空白を無視することを意味します。正確なコピーが必要な場合は、代わりにstd :: istreambuf_iteratorとstd :: ostreambuf_iteratorを使用できます。それらは基礎となる(フォーマットされていない)ストリームバッファで動作し、空白をスキップしたり、改行や何かを変換したりしません。

また、使用することができます:

i >> std::noskipws; 

が消えてから空白を防ぐために。ただし、ストリームがバイナリファイルの場合は、>><<演算子によって他の文字が詰まる可能性があります。

+0

2番目のパラメータがostream_iteratorになっているのはなぜですか? – rlbond

+0

うん、そうじゃないよ! :) (ちょうどそれを修正しました。それはタイプミスでした) – jalf

0

あなたが読んだものを出力、それから読み取る必要があり、かつ:

istream stm; 
string str; 
stm >> str; 
cout << str; 
+0

は、1つの単語(空白で区切られた)だけを読み込みます。私は彼がストリームからすべてをコピーしたいと思う。 – jalf

+0

私は彼がそれを望むなら、彼はそれを言っただろうと思う –

+2

彼は何を望んでいるのか、質問は貧しいです。 –

18

あなたがたIStreamのストリームバッファを出力リレー。

例えば、出力するcoutにはifstream:

std::ifstream f("whatever"); 
std::cout << f.rdbuf(); 
0

のstd :: ifsreamの過負荷とstd :: ostringstream

C++ 11または上


ご注意ください&& in std :: ifstreamあなたが使用できるようにする

#include <iostream> 
#include <sstream> 
#include <fstream> 

std::ostream& operator<<(std::ostream& os, std::basic_ostringstream&& iss){ 
    return os<<iss.str(); 
} 

std::ostream& operator<<(std::ostream& os, std::ifstream&& ifs){ 
    return std::cout<<ifs.rdbuf(); 
} 


int main() 
{ 
    std::cout<<std::ostringstream("Test ostringstream overloading")<<std::endl; 
    std::ofstream("fstream.txt")<<"Test fstream overloading"<<std::endl; 
    std::cout<<std::ifstream("fstream.txt")<<std::endl; // overloading okay 
} 

出力:

Test ostringstream overloading 
Test fstream overloading 


Process returned 0 (0x0) execution time : 0.012 s 
Press ENTER to continue. 
関連する問題