2011-03-13 15 views
73
 
    ostringstream s; 

    s << "123"; 
    cout << s.str().c_str() << endl; 

    // how to clear ostringstream here? 
    s << "456"; 
    cout << s.str().c_str() << endl; 

आउटपुट है:कैसे मिटाएं ostringstream

 
123 
123456 

मैं की जरूरत है:

 
123 
456 

मैं ostringstream कैसे रीसेट कर सकते हैं वांछित आउटपुट पाने के लिए?

उत्तर

161
s.str(""); 
s.clear(); 

पहली पंक्ति स्ट्रिंग को रिक्त करने के लिए रीसेट करने की आवश्यकता है; दूसरी लाइन को सेट किए जा सकने वाले त्रुटि झंडे को साफ़ करने की आवश्यकता है। यदि आप जानते हैं कि कोई त्रुटि झंडे सेट नहीं हैं या आप उन्हें रीसेट करने की परवाह नहीं करते हैं, तो आपको clear() पर कॉल करने की आवश्यकता नहीं है।

आमतौर पर यह एक आसान प्रदर्शन करने के बजाय एक नया std::ostringstream ऑब्जेक्ट का उपयोग करने के लिए आसान, क्लीनर, और अधिक सरल (सीधा करने वाला) है, जब तक किसी ज्ञात प्रदर्शन हॉट स्पॉट में कोड का उपयोग न किया जाए। प्रत्येक बार एक ताजा स्ट्रीम बनाने के लिए

+3

+1। स्ट्रीम में बहुत से आंतरिक राज्य हो सकते हैं। उन सभी को रीसेट करना स्ट्रीम कन्स्ट्रक्टर के रूप में कम से कम कोड लेता है। –

+2

यह उत्तर भी देखने योग्य है: http://stackoverflow.com/a/624291/142239 –

+0

संबंधित प्रश्न: जब एक लूप में घोषित किया जाता है, तो क्या प्रत्येक पुनरावृत्ति पर ostringstream नष्ट हो जाएगा और निर्माण किया जाएगा, या मुझे इस विधि का उपयोग करने की आवश्यकता है? उदाहरण के लिए, 'के लिए (int i = 0; i <100; ++ i) {std :: ostringstream foo; foo << "बार"; std :: cout << foo.str() << "";} '। क्या यह प्रिंट होगा: 'बार बार बार [...] 'या' बार बारबार बारबारबार [...] '? –

संबंधित मुद्दे