Как вы очищаете переменную stringstream?
346954 просмотра
9 ответа
Я уже пробовал несколько вещей,
std::stringstream m;
m.empty();
m.clear();
оба из которых не работают.
Автор: CodingWithoutComments Источник Размещён: 30.08.2019 03:34Ответы (9)
721 плюса
Для всех стандартных типов библиотек функция-член empty()
является запросом, а не командой, то есть она означает "ты пустой?" не "пожалуйста, выбросьте свое содержимое".
Функция- clear()
член наследуется ios
и используется для очистки состояния ошибки потока, например, если файловый поток имеет состояние ошибки, установленное в eofbit
(конец файла), то вызов clear()
вернет состояние ошибки обратно goodbit
(без ошибок) ,
Для очистки содержимого stringstream
, используя:
m.str("");
правильно, хотя с использованием:
m.str(std::string());
технически более эффективен, потому что вы избегаете вызова std::string
конструктора, который принимает const char*
. Но любой компилятор в наши дни должен иметь возможность генерировать один и тот же код в обоих случаях - так что я бы просто пошел с тем, что более читабельно.
42 плюса
Вы можете очистить состояние ошибки и очистить поток строки в одну строку
std::stringstream().swap(m); // swap m with a default constructed stringstream
Это эффективно сбрасывает m в состояние по умолчанию
Автор: Nikos Athanasiou Размещён: 24.04.2014 10:3434 плюса
32 плюса
Это должно быть самым надежным способом независимо от компилятора:
m=std::stringstream();
Автор: jerron
Размещён: 11.10.2012 04:00
12 плюса
Я всегда смотрю на это:
{
std::stringstream ss;
ss << "what";
}
{
std::stringstream ss;
ss << "the";
}
{
std::stringstream ss;
ss << "heck";
}
Автор: TimoK
Размещён: 26.03.2014 05:37
10 плюса
мои 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
0 плюса
Это концептуальная проблема.
Stringstream является потоком, поэтому его итераторы являются прямыми и не могут возвращаться. В выходном потоке строк вам потребуется flush () для его повторной инициализации, как и в любом другом выходном потоке.
Автор: Alcino Dall Igna Junior Размещён: 10.10.2014 08:040 плюса
В C ++ мы используем эти два оператора вместе, чтобы очистить переменную stringstream.
string_stream_varaible.str("");
string_stream_varaible.clear();
вот пример кода:
stringstream res("hello");
res.str("");
res.clear();
Удачного кодирования!
Автор: Priyanshu Tiwari Размещён: 29.08.2019 07:28-10 плюса
Они не отбрасывают данные в потоке строк в gnu c ++
m.str("");
m.str() = "";
m.str(std::string());
Следующее очищает поток строк для меня:
m.str().clear();
Автор: John
Размещён: 06.09.2012 10:58
Вопросы из категории :
- c++ What are the barriers to understanding pointers and what can be done to overcome them?
- c++ Какой самый простой способ для анализа файла INI в C ++?
- c++ Когда вы должны использовать «друг» в C ++?
- c++ Как вы очищаете переменную stringstream?
- c++ В C ++ конструктор и деструктор могут быть встроенными функциями?
- c++ Что такое виртуальный базовый класс в C ++?
- c++ В чем разница между #include <filename> и #include "filename"?
- c++ Какой самый лучший бесплатный детектор утечки памяти для программы на C / C ++ и ее подключаемых библиотек DLL?
- c++ Как преобразовать std :: string в LPCWSTR в C ++ (Unicode)
- c++ Regular cast vs. static_cast vs. dynamic_cast
- stringstream Как очистить струнный поток?
- stringstream Неполный тип не допускается: stringstream
- stringstream Как остановить двойное преобразование в научную нотацию при использовании струнного потока
- stringstream Как вставить строку в начало строки
- stringstream Почему stringstream >> меняет значение цели при сбое?
- stringstream std :: stringstream vs std :: string для конкатенации многих строк
- stringstream Как создать std :: string из std :: vector <string>?
- stringstream как сбросить объект stringstream
- stringstream Неожиданное поведение потока строк