سؤال

لقد حاولت العديد من الأشياء بالفعل ،

std::stringstream m;
m.empty();
m.clear();

وكلاهما لا تعمل.

هل كانت مفيدة؟

المحلول

لجميع المكتبة القياسية أنواع الأعضاء وظيفة empty() هو استفسار وليس الأمر أيوهو ما يعني "أنت فارغ ؟" لا "يرجى رمي بعيدا الخاص بك المحتويات".

على clear() وظيفة عضو ورثت من ios ويستخدم لمسح الخطأ الدولة من تيار ، على سبيل المثالإذا كان ملف تيار له الخطأ الدولة تعيين eofbit (نهاية الملف), ثم يدعو clear() سيتم تعيين الخطأ الدولة مرة أخرى إلى goodbit (أي خطأ).

لمسح محتويات stringstream, باستخدام:

m.str("");

هو الصحيح ، على الرغم من استخدام:

m.str(std::string());

من الناحية التقنية أكثر كفاءة لأنه يمكنك تجنب الاحتجاج std::string منشئ أن يأخذ const char*.ولكن أي مترجم في هذه الأيام يجب أن تكون قادرة على توليد نفس القانون في كل الحالات - لذلك أنا مجرد الذهاب مع ما هو أكثر قابلية للقراءة.

نصائح أخرى

يمكنك مسح الخطأ الدولة وإفراغ strignstream كل في سطر واحد

std::stringstream().swap(m); // swap m with a default constructed stringstream

هذا بشكل فعال يعيد م افتراضي شيدت الدولة

m.str("");

ويبدو أن العمل.

وهذا ينبغي أن تكون الطريقة الأكثر موثوقية بغض النظر عن المترجم:

m=std::stringstream();

أنا دائما النطاق في ذلك:

{
    std::stringstream ss;
    ss << "what";
}

{
    std::stringstream ss;
    ss << "the";
}

{
    std::stringstream ss;
    ss << "heck";
}

بلدي 2 سنت:

هذا يبدو أن العمل بالنسبة لي في كسكودي و dev-c++, كان لدي برنامج في شكل القائمة التي إذا نفذت تكرارا حسب طلب المستخدم سوف تملأ stringstream المتغير الذي من شأنه أن يعمل حسنا في المرة الأولى رمز تشغيل ولكن ليس من الواضح stringstream في المرة القادمة سيتم تشغيل المستخدم نفس القانون.ولكن اثنين من الأسطر من التعليمات البرمجية أدناه أخيرا مسح stringstream متغير في كل مرة قبل ملء متغير سلسلة.(2 ساعات من التجربة و الخطأ و البحث جوجل), راجع للشغل, باستخدام كل خط من تلقاء نفسها لن تفعل خدعة.

//clear the stringstream variable

sstm.str("");
sstm.clear();

//fill up the streamstream variable
sstm << "crap" << "morecrap";

انها مشكلة مفاهيمية.

Stringstream هو تيار ، لذلك التكرار هي إلى الأمام, لا يمكن أن يعود.في إخراج stringstream ، تحتاج دافق() إلى تهيئة ذلك ، كما في أي تيار الإخراج.

هذه لا تجاهل البيانات في stringstream في gnu c++

    m.str("");
    m.str() = "";
    m.str(std::string());

التالية لا فارغة stringstream بالنسبة لي:

    m.str().clear();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top