Вопрос:

Как вы очищаете переменную stringstream?

c++ stringstream

346954 просмотра

9 ответа

18201 Репутация автора

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

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

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

Автор: CodingWithoutComments Источник Размещён: 21.08.2008 06:35

Ответы (9)


34 плюса

18201 Репутация автора

m.str("");

похоже на работу.

Автор: CodingWithoutComments Размещён: 21.08.2008 06:36

721 плюса

21241 Репутация автора

Решение

Для всех стандартных типов библиотек функция-член empty()является запросом, а не командой, то есть она означает "ты пустой?" не "пожалуйста, выбросьте свое содержимое".

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

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

m.str("");

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

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

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

Автор: Wilka Размещён: 21.08.2008 07:00

-10 плюса

21 Репутация автора

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

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

Следующее очищает поток строк для меня:

    m.str().clear();
Автор: John Размещён: 06.09.2012 10:58

32 плюса

329 Репутация автора

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

m=std::stringstream();
Автор: jerron Размещён: 11.10.2012 04:00

10 плюса

882 Репутация автора

мои 2 цента:

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

//clear the stringstream variable

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

//fill up the streamstream variable
sstm << "crap" << "morecrap";
Автор: Francisco Cortes Размещён: 18.10.2013 12:34

12 плюса

149 Репутация автора

Я всегда смотрю на это:

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

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

{
    std::stringstream ss;
    ss << "heck";
}
Автор: TimoK Размещён: 26.03.2014 05:37

42 плюса

16852 Репутация автора

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

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

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

Автор: Nikos Athanasiou Размещён: 24.04.2014 10:34

0 плюса

11 Репутация автора

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

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

Автор: Alcino Dall Igna Junior Размещён: 10.10.2014 08:04

0 плюса

21 Репутация автора

В C ++ мы используем эти два оператора вместе, чтобы очистить переменную stringstream.

string_stream_varaible.str("");         
string_stream_varaible.clear();

вот пример кода:

stringstream res("hello");
res.str("");
res.clear();

Удачного кодирования!

Автор: Priyanshu Tiwari Размещён: 29.08.2019 07:28
Вопросы из категории :
32x32