Сведения о вопросе

SOON

01:35, 9th August, 2020

Теги

c++   stringstream    

Как очистить переменную stringstream?

Просмотров: 616   Ответов: 8

Я уже пробовал несколько вещей,

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

оба из которых не работают.



  Сведения об ответе

fo_I_K

03:02, 28th August, 2020

Для всех стандартных типов библиотек функция-член empty() является запросом, а не командой, т. е. она означает "are you empty?", а не "please throw away your contents".

Функция-член clear() наследуется от ios и используется для очистки состояния ошибки потока, например, если файловый поток имеет состояние ошибки, установленное в eofbit (end-of-file), то вызов clear() вернет состояние ошибки в goodbit (без ошибки).

Для очистки содержимого файла stringstream, используя:

m.str("");

правильно, хотя с помощью:

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

технически это более эффективно, потому что вы избегаете вызова конструктора std::string , который принимает const char* . Но любой компилятор в наши дни должен быть способен генерировать один и тот же код в обоих случаях - поэтому я бы просто пошел с тем, что более читаемо.


  Сведения об ответе

#hash

10:58, 5th August, 2020

Вы можете очистить состояние ошибки и очистить strignstream все в одной строке

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

Это эффективно сбрасывает m в созданное по умолчанию состояние


  Сведения об ответе

KOMP

15:24, 12th August, 2020

m.str("");

похоже, это сработало.


  Сведения об ответе

davran

14:08, 28th August, 2020

Это должен быть самый надежный способ независимо от компилятора:

m=std::stringstream();


  Сведения об ответе

COOL

10:05, 27th August, 2020

Я всегда его оцениваю:

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

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

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


  Сведения об ответе

appple

07:11, 10th August, 2020

мои 2 цента:

это, казалось, работали для меня в xcode и dev-c++, у меня была программа в виде меню, что если выполняется итеративно в соответствии с запросом пользователя пополнит stringstream переменной, которая будет работать нормально в первый раз код выполняется, но не понятно в stringstream в следующий раз, когда пользователь будет запускать один и тот же код. но две строки кода ниже, наконец, очистили переменную stringstream каждый раз, прежде чем заполнить переменную string. (2 часа проб и ошибок и поисков в google), кстати, использование каждой строки самостоятельно не сделает трюк.

//clear the stringstream variable

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

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


  Сведения об ответе

KOMP

21:00, 24th August, 2020

Это концептуальная проблема.

Stringstream - это поток, поэтому его итераторы являются прямыми и не могут возвращаться. В выходном строковом потоке, как и в любом другом выходном потоке, вам потребуется flush() для его повторной инициализации.


  Сведения об ответе

SSESION

22:08, 29th August, 2020

Они не отбрасывают данные в потоке строк в gnu c++

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

Следующее Действительно опустошает stringstream для меня:

    m.str().clear();


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться