मेरे पास एक स्ट्रिंग है जिसका अंतिम भाग (प्रत्यय) कई बार बदला जाना चाहिए और मुझे नए तार उत्पन्न करने की आवश्यकता है। मैं ऐसा करने के लिए ostringstream का उपयोग करने की कोशिश कर रहा हूं, जैसा कि मुझे लगता है, धाराओं का उपयोग स्ट्रिंग concatenations से तेज होगा। लेकिन जब पिछले प्रत्यय बाद के एक से अधिक है, तो यह गड़बड़ हो जाता है। स्ट्रीम नल पात्रों को भी बंद कर देता है।ओस्ट्रिंगस्ट्रीम स्ट्रिप न्यूल क्यों करता है?
#include<iostream>
#include<sstream>
using namespace std;
int main()
{
ostringstream os;
streampos pos;
os << "Hello ";
pos = os.tellp();
os << "Universe";
os.seekp(pos);
cout<< os.str() << endl;
os << "World\0";
cout<< os.str().c_str() << endl;
return 0;
}
आउटपुट
Hello Universe
Hello Worldrse
लेकिन मैं Hello World
चाहते हैं। मैं यह कैसे करु? क्या इसे तेजी से करने का कोई और तरीका है?
संपादित करें: std::ends
कार्य करता है। लेकिन सोच रहा है कि यह आंतरिक रूप से कैसे काम करता है। यह भी जानना पसंद है कि ऐसा करने के तेज तरीके हैं या नहीं।
इतना यकीन है कि stringstream सबसे कुशल हो जाएगा की तरह सिर्फ कर सकता है - आप 'std :: स्ट्रिंग के वेरिएंट में से एक पर विचार करना चाहिए: : की जगह() ' – Nim