Clearing stringstream

int main()
{
   string pnm;
   stringstream S;
   int x=123;
   int y=222;

   S << "xyz"  << x << "lpm" << y;
   
   pnm = S.str();
   cout << pnm << endl; // output should be xyz123lpm222

  // I would like to Clear 'S' - make it empty and reuse
  // to create another stream. (Modify its content)

   return 0;
}
LVL 4
prashant_n_mhatreAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

jkrCommented:
I son't work a lot with stringstreams, but regarding the class hierarchy, calling 'S.flush()' should be enough...
0
prashant_n_mhatreAuthor Commented:
doesn't work...
0
prashant_n_mhatreAuthor Commented:
Thanks..I've figured out.

 S.seekp(0, ios::beg);

does that.
0
HTML5 and CSS3 Fundamentals

Build a website from the ground up by first learning the fundamentals of HTML5 and CSS3, the two popular programming languages used to present content online. HTML deals with fonts, colors, graphics, and hyperlinks, while CSS describes how HTML elements are to be displayed.

TriskelionCommented:
Are you going to delete the question?
0
prashant_n_mhatreAuthor Commented:
Actually it will not work if I change the field length.
I need to add something like

freeze(false);

But that doesn't work with stringstream.
0
nietodCommented:
>> Thanks..I've figured out.
>> 
>> S.seekp(0, ios::beg);
>> 
>> does that.
Nope you didn't figure it out!  :-)

That makes a mess. (if you are not careful.

You need

stringstream S;
S.str(string());

or

S.str("");

continues
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
TriskelionCommented:
Are you going to delete the question?
0
TriskelionCommented:
That was an accident.
0
nietodCommented:
EE is not working well right now!   I was tryign to post fo the longest time. Anyways to contineu--hopefully.

As I see you now realize, the problem with

   S.seekp(0, ios::beg);

is that it just moves the write position back to the start of the stream.  But the data already written stays there, so if you do.

   S <<"1234567890";
   S.seekp(0);
   S << "ABC";
   string AString = S.str();

This leaves AString with "ABC4567890" instead of just "ABC".

Now there is an expert who will tell you that the correct solution is to that the fix for this is

   S <<"1234567890";
   S.seekp(0);
   S << "ABC" << char(0);
   string AString = S.str();

But do not be fooled!  This just sticks a NUL terminator in the middle of the string data so that it appears like "ABC" is all that is stored.  its not.  it still stores the "567890" after that.  In fact the string's length() function will report this.   Don't fall for this!

Instead make use of the fact that you can store a new string data sequence in the stream object with the overlaoded str() member function.  i.e. you can do

   S.str("ABC");

and now the stream stores "ABC".  I you read from the stream you will read "ABC"  If you write to the stream you will wrote after the "ABC"  (unless you seek around.)  

In your case you want to set the stream to store an empty string, like

   S.str(string());

New the stream is empty.  It stores no data to read from the stream.  It stores no data that will be combined with data written to the stream.

Note that I am not sure how this operation effects the stram position.  You might still need to seek to the start of the stream after clearing its contents.
0
nietodCommented:
Okay, you shouldn't need to do a seekp(0) or seekg(0).  The str(string) member function will reset the read and write positions to 0.
0
prashant_n_mhatreAuthor Commented:
Thanks all!!!
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C++

From novice to tech pro — start learning today.