मैंने पहले से ही कई चीजों की कोशिश की है,
std::stringstream m;
m.empty();
m.clear();
दोनों काम नहीं करते।
मैंने पहले से ही कई चीजों की कोशिश की है,
std::stringstream m;
m.empty();
m.clear();
दोनों काम नहीं करते।
जवाबों:
सभी मानक लाइब्रेरी प्रकारों के लिए सदस्य फ़ंक्शन empty()
एक क्वेरी है, न कि कमांड, अर्थात इसका अर्थ है "क्या आप खाली हैं?" नहीं "कृपया अपनी सामग्री फेंक दें"।
clear()
सदस्य समारोह से विरासत में मिला है ios
और अगर एक फ़ाइल धारा में त्रुटि राज्य सेट है धारा, जैसे की त्रुटि राज्य स्पष्ट करने के लिए प्रयोग किया जाता है eofbit
(अंत के फ़ाइल), तो बुला clear()
करने के लिए त्रुटि राज्य वापस कर देगा goodbit
(कोई त्रुटि) ।
stringstream
का उपयोग कर, की सामग्री को साफ़ करने के लिए :
m.str("");
सही है, हालांकि उपयोग कर रहा है:
m.str(std::string());
तकनीकी रूप से अधिक कुशल है, क्योंकि आप std::string
कंस्ट्रक्टर को लेने से बचते हैं const char*
। लेकिन इन दिनों किसी भी संकलक को दोनों मामलों में एक ही कोड उत्पन्न करने में सक्षम होना चाहिए - इसलिए मैं जो भी अधिक पठनीय है, उसके साथ जाऊंगा।
आप त्रुटि स्थिति को साफ़ कर सकते हैं और एक लाइन में सभी स्ट्रिंगस्ट्रीम को खाली कर सकते हैं
std::stringstream().swap(m); // swap m with a default constructed stringstream
यह प्रभावी रूप से एक डिफ़ॉल्ट निर्मित अवस्था में m को रीसेट करता है
m.str("");
काम करने लगता है।
यह संकलक की परवाह किए बिना सबसे विश्वसनीय तरीका होना चाहिए:
m=std::stringstream();
mm.clear(); mm.str("");
लिए चाल चली । (कोई सी ++ 11, अन्यथा स्वैप बेहतर होगा)।
swap
चाल-असाइनमेंट से बेहतर क्यों होगा ?
मेरे 2 सेंट:
यह मेरे लिए xcode और dev-c ++ में काम करता प्रतीत हुआ, मेरे पास एक मेनू के रूप में एक कार्यक्रम था कि यदि उपयोगकर्ता के अनुरोध के अनुसार इसे निष्पादित किया जाता है, तो एक स्ट्रिंगस्ट्रीम चर भर जाएगा जो पहली बार कोड ठीक काम करेगा। अगली बार जब उपयोगकर्ता एक ही कोड चलाएगा, तो उसे चलाएं, लेकिन यह स्पष्ट नहीं होगा। लेकिन नीचे दिए गए कोड की दो लाइनों ने स्ट्रिंग चर को भरने से पहले स्ट्रिंगस्ट्रीम चर को हर बार साफ कर दिया। (2 घंटे का परीक्षण और त्रुटि और Google खोज), btw, अपने दम पर प्रत्येक पंक्ति का उपयोग कर चाल नहीं चलेगा।
//clear the stringstream variable
sstm.str("");
sstm.clear();
//fill up the streamstream variable
sstm << "crap" << "morecrap";
यह एक वैचारिक समस्या है।
स्ट्रिंगस्ट्रीम एक धारा है, इसलिए इसके पुनरावृत्त आगे हैं, वापस नहीं लौट सकते। एक आउटपुट स्ट्रिंगस्ट्रीम में, आपको इसे किसी भी अन्य आउटपुट स्ट्रीम की तरह, इसे फिर से संगठित करने के लिए फ्लश () की आवश्यकता होती है।
ये gnu c ++ में स्ट्रिंगस्ट्रीम में डेटा को नहीं छोड़ते हैं
m.str("");
m.str() = "";
m.str(std::string());
निम्नलिखित मेरे लिए स्ट्रिंग को खाली करता है:
m.str().clear();