Variables within strings? (C++)

Started by
22 comments, last by ifthen 11 years, 4 months ago

#include <sstream>
//declare it somewhere
std::stringstream ss; //internal string empty at beginning
//usage
ss << "You, along with your " << numFriends << " friends, set up camp..."; //append this to the internal string
std::string setUpCampLabel = ss.str(); //get a copy of stringbuilder internal string
ss.clear(); //clear the internal string
ss << "You were eaten by a bear!";
std::cout << setUpCampLabel << std::endl <<ss.str(); //it is possible to print the internal string directly

How is this any more efficient than just putting:
cout << "You, along with your " << numFriends << " friends, set up camp..." << endl << "You were eaten by a bear!"

First, efficiency wasn't your question. How to put variables into a [font=courier new,courier,monospace]string[/font] was, and that's what was shown. Yes, doing that is "less efficient" than just printing everything out to [font=courier new,courier,monospace]cout[/font] directly.


I'm also using DevC++, not Visual Studio.

Why you shouldn’t use Dev-C++ (or maybe you're using an updated version of Dev-C++?)


So, in short, you simply can't declare a string and put an integer variable within it? You have to do that?

Nope. Welcome to C++ :). You either have to use [font=courier new,courier,monospace]stringstream[/font], [font=courier new,courier,monospace]to_string()[/font] (as Zaoshi Kaba showed), [font=courier new,courier,monospace]itoa()[/font] (please, please, please don't use this), your own custom method, an external library like [font=courier new,courier,monospace]boost[/font] and its [font=courier new,courier,monospace]lexical_cast[/font], etc.

@superman3275: Did I miss something? I thought he was trying to put [font=courier new,courier,monospace]int[/font]s into [font=courier new,courier,monospace]string[/font]s, not [font=courier new,courier,monospace]string[/font]s into [font=courier new,courier,monospace]int[/font]s...
[size=2][ I was ninja'd 71 times before I stopped counting a long time ago ] [ f.k.a. MikeTacular ] [ My Blog ] [ SWFer: Gaplessly looped MP3s in your Flash games ]
Advertisement
There are two good methods of converting variables into a string, both already mentioned. They are the 'correct' answer, as far as any answer could be correct.

Method one: Use streams for complex formatting.
std::stringstream myStream;
myStream << "Meow " << number << " wuff " << myFloat << " blah blah " << otherStuff;
std::string myResult = myStream.str();


Method two: Use a standalone function for simple formatting.
std::string myResult = "blah = " << IntToString(blah);

'IntToString()' is not a pre-existing function (though there are C-style functions that do similar in the standard library, they don't give out a std::string).

You can make your own like this: (this code has to go in a header file)
#include <sstream>

template<typename Type>
std::string ConvertToString(Type value)
{
std::stringstream sstream;
sstream << value;

return sstream.str();
}

template<typename Type>
Type ConvertFromString(const std::string &str)
{
std::stringstream sstream;
sstream << str;

Type type;
sstream >> type;

return type;
}


And you can use it like this:
std::string myStr = ConvertToString(myInt);
int myInt = ConvertFromString<int>(myStr);



Well, if you use:


int ParsedNumber = std::to_int(StringThatNeedsParsing);


Like SiCrane, I'm confused by this statement. Where is "std::to_int" found in the standard library? It wasn't in the old standard, and with a few quick googles I can't find it in C++11 either. Is it a non-standard extension for some compiler?


Like SiCrane, I'm confused by this statement. Where is "std::to_int" found in the standard library? It wasn't in the old standard, and with a few quick googles I can't find it in C++11 either. Is it a non-standard extension for some compiler?


Can't find it either anywhere or even a single mention of something really like this anywhere on Google. Something tells me he was mistaken, somehow got different languages mixed up, or something else.
One could still do what we used to do in C, and then put the result in a string:
char buffer[100];
std::snprintf(buffer, 100, "Hi, I am %d years old.", x);
std::string my_string(buffer);

That's kind of ugly, because it requires you to come up with an upper bound for the space needed for the string, and because it formats the string in one buffer and then you need to copy it if you want it as a string. But if you need to do any formatting of the numbers, it's much easier to use the printf family of functions than <iomanip>. You can also pick different formatting strings dynamically, which is much more flexible than the other methods.

Another interesting alternative for formatting is Boost Format..
I'm sorry, I mixed up that funtion. What I meant was std::to_string. When I had a score counter in Pong, I had an integer that I used to keep track of the score. To display the score, I had to convert the integer to a string, so I used std::to_string. I must have mixed that up with a function to convert strings to ints, so I'm sorry. Either way, I would use std::stringstream for this. Very Sorry :)!

I'm a game programmer and computer science ninja !

Here's my 2D RPG-Ish Platformer Programmed in Python + Pygame, with a Custom Level Editor and Rendering System!

Here's my Custom IDE / Debugger Programmed in Pure Python and Designed from the Ground Up for Programming Education!

Want to ask about Python, Flask, wxPython, Pygame, C++, HTML5, CSS3, Javascript, jQuery, C++, Vimscript, SFML 1.6 / 2.0, or anything else? Recruiting for a game development team and need a passionate programmer? Just want to talk about programming? Email me here:

hobohm.business@gmail.com

or Personal-Message me on here !

Also, I'm not sure if DevC++ even supports std::stringstream?

I'm a game programmer and computer science ninja !

Here's my 2D RPG-Ish Platformer Programmed in Python + Pygame, with a Custom Level Editor and Rendering System!

Here's my Custom IDE / Debugger Programmed in Pure Python and Designed from the Ground Up for Programming Education!

Want to ask about Python, Flask, wxPython, Pygame, C++, HTML5, CSS3, Javascript, jQuery, C++, Vimscript, SFML 1.6 / 2.0, or anything else? Recruiting for a game development team and need a passionate programmer? Just want to talk about programming? Email me here:

hobohm.business@gmail.com

or Personal-Message me on here !


I'm sorry, I mixed up that funtion. What I meant was std::to_string.

Excellent, so that's a new C++11 function? Good to know; thanks for posting that!


Also, I'm not sure if DevC++ even supports std::stringstream?

Dev C++ is an IDE, it uses MinGW as the compiler, and MinGW's C++ library implements the standard. Though the version of MinGW that ships with Dev C++ is probably outdated.

Still, I recommend QtCreator over Dev C++.
[s]Gosh, never realised this. Could I perhaps use Notepad++ over all the other options? I tried to find if Visual Studio was free, but all I got was trials. If someone could perhaps give me a link to the free version (not for Windows 8), it'd be appreciated. How do I register for a free product key?[/s]
Nevermind.
I have another problem, now.

int wait(int x)
{
Sleep(1000) * x;
}

returns:
error C2296: '*' : illegal, left operand has type 'void'
Did you mean Sleep(1000 * x)?

This topic is closed to new replies.

Advertisement