मैं एक स्ट्रिंग में एक संपूर्ण धारा (एकाधिक लाइनों) को पढ़ने की कोशिश कर रहा हूं।संपूर्ण स्ट्रीम को std :: स्ट्रिंग में कैसे पढ़ा जाए?
मैं इस कोड का उपयोग कर रहा हूं, और यह काम करता है, लेकिन यह मेरी शैली की भावना को अपमानित कर रहा है ... निश्चित रूप से एक आसान तरीका है? शायद स्ट्रिंगस्ट्रीम का उपयोग कर?
void Obj::loadFromStream(std::istream & stream)
{
std::string s;
std::streampos p = stream.tellg(); // remember where we are
stream.seekg(0, std::ios_base::end); // go to the end
std::streamoff sz = stream.tellg() - p; // work out the size
stream.seekg(p); // restore the position
s.resize(sz); // resize the string
stream.read(&s[0], sz); // and finally, read in the data.
असल , एक स्ट्रिंग के लिए एक
const
संदर्भ के रूप में अच्छी तरह से करना होगा, और कहा कि चीजों को आसान बनाने सकता है ...
const std::string &s(... a miracle occurs here...)
यदि आप चाहें तो यह अभी भी एक-लाइनर हो सकता है: 'स्ट्रिंग एस = स्ट्रिंग (...) '। –
धन्यवाद। क्या आप यह बता सकते हैं कि यह क्या कर रहा है? क्या किसी को भी शुरू करने की जरूरत नहीं है? – Roddy
@Roddy: स्ट्रिंग istreambuf_iterator से रेंज-कन्स्ट्रक्टेड है, जो अनफॉर्म किए गए वर्णों को तब तक सक्रिय करता है जब तक यह डिफ़ॉल्ट-निर्मित इनपुट इटरेटर, उर्फ "स्ट्रीम का अंत" के बराबर न हो जाए। स्कॉट मेयर्स, प्रभावी एसटीएल आइटम 29 देखें: चरित्र-दर-चरित्र इनपुट – Cubbi