How to clear out a stringstream in C++? Options

codeling 1262 - 5391
@2019-06-06 08:49:08

If you try the following C++ snippet:

std::stringstream ss;
std::string str1, str2;
float f1 = 10.0;
float f2 = 20.0;

ss << f1;
ss >> str1;


ss << f2;
ss >> str2;

you'll find that str2 is empty.

ss.str("") clears the stream but when you try to add a new value to the stream, it somehow doesnt get updated. therefore, you have to add a clear() statement just before or after str("") like the following...




this not only clears the stream but also allows you to add a new value to it.

codeling 1262 - 5391
@2019-06-06 09:05:16

The function str() can be used in two ways. First, it can be used to get a copy of the string that is being manipulated by the current stream string. This is most useful with output strings. For example:

  ostringstream stream1;
  stream1 << "Testing!" << endl;
  cout << stream1.str();

Second, str() can be used to copy a string into the stream. This is most useful with input strings. For example:

  istringstream stream1;
  string string1 = "25";

str(), along with clear(), is also handy when you need to clear the stream so that it can be reused:

  istringstream stream1;
  float num;

  // use it once
  string string1 = "25 1 3.235\n1111111\n222222";
  while( stream1 >> num ) cout << "num: " << num << endl;  // displays numbers, one per line

  // use the same string stream again with clear() and str()
  string string2 = "1 2 3 4 5  6 7 8 9 10";

  while( stream1 >> num ) cout << "num: " << num << endl;  // displays numbers, one per line

codeling 1262 - 5391
@2019-06-06 09:22:23

Try to the following C++ code to learn the usage of clear() and str():

    string test;
    string test2;
    stringstream ss;

    for(int j=0;j<10;j++)
        test = ss.str();
        cout <<test<<" "<<ss.str()<<" "<<test2<<endl;

use ss.clear() only:

Use str("") only:

use clear() and str(""):


Users browsing this topic