উত্তর:
আমি অতীতে পরিষ্কার এবং স্ট্রের একটি ক্রম ব্যবহার করেছি:
// clear, because eof or other bits may be still set.
s.clear();
s.str("");
যা ইনপুট এবং আউটপুট উভয় স্ট্রিম স্ট্রিমের জন্য কাজটি করেছে। বিকল্পভাবে, আপনি ম্যানুয়ালি সাফ করতে পারেন, তারপরে শুরুতে যথাযথ ক্রম সন্ধান করুন:
s.clear();
s.seekp(0); // for outputs: seek put ptr to start
s.seekg(0); // for inputs: seek get ptr to start
এটি str
বর্তমানে পরিবর্তে আউটপুট বাফারে যা আছে তা ওভাররাইট করে কিছু পুনর্বিবেচনা রোধ করবে । ফলাফলগুলি এরকম:
std::ostringstream s;
s << "hello";
s.seekp(0);
s << "b";
assert(s.str() == "bello");
আপনি যদি সি-ফাংশনগুলির জন্য স্ট্রিংটি ব্যবহার করতে চান তবে আপনি এইভাবে std::ends
একটি টার্মিনেটিং নাল লাগিয়ে ব্যবহার করতে পারেন :
std::ostringstream s;
s << "hello";
s.seekp(0);
s << "b" << std::ends;
assert(s.str().size() == 5 && std::strlen(s.str().data()) == 1);
std::ends
অবচিত হ'ল একটি প্রতীক std::strstream
, যা আপনি স্ট্যাকের জন্য বরাদ্দ করা একটি চর অ্যারে সরাসরি লিখতে সক্ষম হয়েছিল। আপনাকে ম্যানুয়ালি একটি সমাপ্ত নাল inোকাতে হবে। তবে, std::ends
অবহেলিত নয়, আমি মনে করি কারণ এটি উপরের ক্ষেত্রে যেমন এখনও কার্যকর।
s.str("");
পরিবর্তে করেছি। auto str = s.str(); auto cstr = str.c_str(); file << cstr; s.clear(); s.seekp(0); s << ends;
boost::any a = 1; std::ostringstream buffer; buffer << a << std::ends; EXPECT_EQ( buffer.str(), "any<(int)1>" );
TestUtilsTest.cpp:27: Failure Expected: buffer.str() Which is: "any<(int)1>\0" To be equal to: "any<(int)1>"
s.seekp(0); s << std::ends; s.seekp(0);
মনে হচ্ছে ostr.str("")
কলটি কৌশলটি করে does
আপনি যদি বাফারটিকে এমনভাবে সাফ করতে যাচ্ছেন যা এটির প্রথম ব্যবহারের আগেই এটি পরিষ্কার হয়ে যায়, আপনাকে প্রথমে ডাব্লু / এমএসভিসি বাফারে কিছু যুক্ত করতে হবে।
struct Foo {
std::ostringstream d_str;
Foo() {
d_str << std::ends; // Add this
}
void StrFunc(const char *);
template<class T>
inline void StrIt(const T &value) {
d_str.clear();
d_str.seekp(0); // Or else you'll get an error with this seek
d_str << value << std::ends;
StrFunc(d_str.str().c_str()); // And your string will be empty
}
};
আপনি না। স্বচ্ছতার জন্য দুটি ভিন্ন ভিন্ন নামযুক্ত স্ট্রিম ব্যবহার করুন এবং অনুকূলিতকরণ সংকলকটি এটি পুরানোটিকে পুনরায় ব্যবহার করতে পারে তা নির্ধারণ করুন।
ostringstream
(পড়ার উপাত্তের উপর ভিত্তি করে) এবং তারপরে ostringstream
কোথাও কোথাও নির্মিত স্ট্রিংটি সময়ে সময়ে লিখতে হবে (যেমন একটি নির্দিষ্ট অক্ষরের ক্রম পড়ার পরে) এবং শুরু করুন একটি নতুন স্ট্রিং নির্মাণ।