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



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



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


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

639   8  

8 ответов:

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

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

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

m.str("");

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

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

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

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

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

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

m.str("");

Кажется, работает.

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

m=std::stringstream();

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

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

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

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

мои 2 цента:

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

//clear the stringstream variable

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

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

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

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

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

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

следующее делает пустой stringstream для меня:

    m.str().clear();

Comments

    Ничего не найдено.