2009-03-24 11 views
13

पर एक संपूर्ण आईट्रीम मुद्रित करने के लिए कैसे करें आप मानक आउटपुट के लिए एक आईट्रीम चर मुद्रित कैसे करते हैं।मानक आउट और स्ट्रिंग

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

यह प्रिंट होगा: [संपादित करें] मैं एक परिदृश्य डिबग करने के लिए जिसमें मैं

+0

कृपया यह स्पष्ट यह क्या है आप क्या करने की कोशिश कर रहे हैं। –

+0

मैं पूरी स्ट्रिंग को मुद्रित करना चाहता हूं – kal

उत्तर

5

यह उस समय पूरे धारा, 1 चरित्र प्रिंट होगा एक लॉग फ़ाइल के लिए एक IStream ouput करने की जरूरत है कोशिश कर रहा हूँ

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

संपादित करें:: बस एक ही मूल्य मैं यह सोचते कर रहा हूँ कि आप धारा की सारी सामग्री को कॉपी करना चाहते हैं, और नहीं पूरी बात है, लेकिन खाली स्थान के त्यागें। यदि आप केवल एक शब्द पढ़ना चाहते हैं, तो इसके बजाय 1800 का उत्तर देखें।


स्पष्ट समाधान थोड़ी देर के पाश एक समय में एक शब्द को कॉपी है, लेकिन आप क्या कर सकते हैं यह सरल, एक अच्छा 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; 

गायब से खाली स्थान के रोकने के लिए। ध्यान दें, हालांकि, यदि आपकी स्ट्रीम एक बाइनरी फ़ाइल है, तो कुछ अन्य वर्ण >> और << ऑपरेटरों द्वारा clobbered हो सकता है।

+0

दूसरा पैरामीटर ostream_iterator क्यों है? – rlbond

+0

एर, यह नहीं है! :) (बस इसे ठीक किया गया। यह एक टाइपो था) – jalf

0

आप इसे से पढ़ने की जरूरत है, और फिर उत्पादन आप क्या पढ़ा:

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

जो केवल एक शब्द (व्हाइटस्पेस सीमित) पढ़ता है। मुझे लगता है कि वह स्ट्रीम से सबकुछ कॉपी करना चाहता है। – jalf

+0

मुझे लगता है कि अगर वह चाहता था, तो उसने कहा होगा कि –

+2

कौन जानता है कि वह क्या चाहता है, सवाल खराब है। –

18

आप IStream के streambuf ouput।

उदाहरण के लिए, उत्पादन के लिए एक ifstream अदालत को:

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

std :: ifsream ओवरलोडिंग और std :: ostringstream

C++ 11 या ऊपरी


वेतन ध्यान &&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. 
संबंधित मुद्दे