Easiest way to convert int to string in C++

ID : 512

viewed : 135

Tags : c++stringinttype-conversionc++

Top 5 Answer for Easiest way to convert int to string in C++

vote vote

91

C++11 introduces std::stoi (and variants for each numeric type) and std::to_string, the counterparts of the C atoi and itoa but expressed in term of std::string.

#include <string>   std::string s = std::to_string(42); 

is therefore the shortest way I can think of. You can even omit naming the type, using the auto keyword:

auto s = std::to_string(42); 

Note: see [string.conversions] (21.5 in n3242)

vote vote

81

C++20 update: std::format would be the idiomatic way now.


C++17 update:

Picking up a discussion with @v.oddou a couple of years later, C++17 has finally delivered a way to do the originally macro-based type-agnostic solution (preserved below) without going through macro uglyness.

// variadic template template < typename... Args > std::string sstr( Args &&... args ) {     std::ostringstream sstr;     // fold expression     ( sstr << std::dec << ... << args );     return sstr.str(); } 

Usage:

int i = 42; std::string s = sstr( "i is: ", i ); puts( sstr( i ).c_str() );  Foo x( 42 ); throw std::runtime_error( sstr( "Foo is '", x, "', i is ", i ) ); 

Original (C++98) answer:

Since "converting ... to string" is a recurring problem, I always define the SSTR() macro in a central header of my C++ sources:

#include <sstream>  #define SSTR( x ) static_cast< std::ostringstream & >( \         ( std::ostringstream() << std::dec << x ) ).str() 

Usage is as easy as could be:

int i = 42; std::string s = SSTR( "i is: " << i ); puts( SSTR( i ).c_str() );  Foo x( 42 ); throw std::runtime_error( SSTR( "Foo is '" << x << "', i is " << i ) ); 

The above is C++98 compatible (if you cannot use C++11 std::to_string), and does not need any third-party includes (if you cannot use Boost lexical_cast<>); both these other solutions have a better performance though.

vote vote

77

I usually use the following method:

#include <sstream>  template <typename T>   std::string NumberToString ( T Number )   {      std::ostringstream ss;      ss << Number;      return ss.str();   } 

It is described in details here.

vote vote

65

Current C++

Starting with C++11, there's a std::to_string function overloaded for integer types, so you can use code like:

int a = 20; std::string s = std::to_string(a); // or: auto s = std::to_string(a); 

The standard defines these as being equivalent to doing the conversion with sprintf (using the conversion specifier that matches the supplied type of object, such as %d for int), into a buffer of sufficient size, then creating an std::string of the contents of that buffer.

Old C++

For older (pre-C++11) compilers, probably the most common easy way wraps essentially your second choice into a template that's usually named lexical_cast, such as the one in Boost, so your code looks like this:

int a = 10; string s = lexical_cast<string>(a); 

One nicety of this is that it supports other casts as well (e.g., in the opposite direction works just as well).

Also note that although Boost lexical_cast started out as just writing to a stringstream, then extracting back out of the stream, it now has a couple of additions. First of all, specializations for quite a few types have been added, so for many common types, it's substantially faster than using a stringstream. Second, it now checks the result, so (for example) if you convert from a string to an int, it can throw an exception if the string contains something that couldn't be converted to an int (e.g., 1234 would succeed, but 123abc would throw).

vote vote

54

If you have Boost installed (which you should):

#include <boost/lexical_cast.hpp>  int num = 4; std::string str = boost::lexical_cast<std::string>(num); 

Top 3 video Explaining Easiest way to convert int to string in C++

Related QUESTION?