What is the shortest way, preferably inline-able, to convert an int to a string? Answers using stl and boost will be welcomed.
12 Answers
You can use std::to_string in C++11
int i = 3; std::string str = std::to_string(i); #include <sstream> #include <string> const int i = 3; std::ostringstream s; s << i; const std::string i_as_string(s.str()); 1 Comment
std::ostringstream().operator<<(i).str()?Well, the well known way (before C++11) to do that is using the stream operator :
#include <sstream> std::ostringstream s; int i; s << i; std::string converted(s.str()); Of course, you can generalize it for any type using a template function ^^
#include <sstream> template<typename T> std::string toString(const T& value) { std::ostringstream oss; oss << value; return oss.str(); } Comments
boost::lexical_cast<std::string>(yourint) from boost/lexical_cast.hpp
Work's for everything with std::ostream support, but is not as fast as, for example, itoa
It even appears to be faster than stringstream or scanf:
4 Comments
lexical_cast brings, but feel Boost is pretty much overkill for this kind of tasks...If you cannot use std::to_string from C++11, you can write it as it is defined on cppreference.com:
std::string to_string( int value )Converts a signed decimal integer to a string with the same content as whatstd::sprintf(buf, "%d", value)would produce for sufficiently large buf.
Implementation
#include <cstdio> #include <string> #include <cassert> std::string to_string( int x ) { int length = snprintf( NULL, 0, "%d", x ); assert( length >= 0 ); char* buf = new char[length + 1]; snprintf( buf, length + 1, "%d", x ); std::string str( buf ); delete[] buf; return str; } You can do more with it. Just use "%g" to convert float or double to string, use "%x" to convert int to hex representation, and so on.
Comments
Non-standard function, but its implemented on most common compilers:
int input = MY_VALUE; char buffer[100] = {0}; int number_base = 10; std::string output = itoa(input, buffer, number_base); Update
C++11 introduced several std::to_string overloads (note that it defaults to base-10).
4 Comments
ostream works as well, until you need to save the number-string as something other than a binary, octal, or hex format (e.g. base-32).itoa() or stricmp() are given as the answer to anything.sprintf can also accomplish the goal of the OP (though still suffers from the lack of flexibility if anything other than the common base numbers is needed).The following macro is not quite as compact as a single-use ostringstream or boost::lexical_cast.
But if you need conversion-to-string repeatedly in your code, this macro is more elegant in use than directly handling stringstreams or explicit casting every time.
It is also very versatile, as it converts everything supported by operator<<(), even in combination.
Definition:
#include <sstream> #define SSTR( x ) dynamic_cast< std::ostringstream & >( \ ( std::ostringstream() << std::dec << x ) ).str() Explanation:
The std::dec is a side-effect-free way to make the anonymous ostringstream into a generic ostream so operator<<() function lookup works correctly for all types. (You get into trouble otherwise if the first argument is a pointer type.)
The dynamic_cast returns the type back to ostringstream so you can call str() on it.
Use:
#include <string> int main() { int i = 42; std::string s1 = SSTR( i ); int x = 23; std::string s2 = SSTR( "i: " << i << ", x: " << x ); return 0; } 15 Comments
inline template<class T> std::string SSTR( T x ) { return dynamic_cast< std::ostringstream & >( (std::ostringstream() << std::dec << x) ).str() } do? (Haven't tested, but I do wonder what would go wrong and why?int (my first example). But without the ostream visible to the compiler in main (as it is hidden within the template function), it will try to look up operator<<() for const char [] in my second example - which will croak. I know the OP asked only for an int, but this more generic macro is so useful (and actually quite widespread) that I thought I'd include it here.While std::to_string is a straightforward tool that should be kept in mind, starting with C++20, you may include <format>, which allows for more elaborates conversations from int to string:
#include <iostream> #include <locale> #include <format> int main() { using std::cout, std::endl; auto const n = 42; cout << std::format("{}", n) << endl; cout << std::format("{:d}", n) << endl; cout << std::format("{:#x}", n) << endl; cout << std::format("{:#o}", n) << endl; cout << std::format("{:#b}", n) << endl; } output:
42 42 0x2a 052 0b101010 Comments
You might include the implementation of itoa in your project.
Here's itoa modified to work with std::string: http://www.strudel.org.uk/itoa/
Comments
Suppose I have integer = 0123456789101112. Now, this integer can be converted into a string by the stringstream class.
Here is the code in C++:
#include <bits/stdc++.h> using namespace std; int main() { int n,i; string s; stringstream st; for(i=0;i<=12;i++) { st<<i; } s=st.str(); cout<<s<<endl; return 0; } #include <string> #include <stdlib.h> Here, is another easy way to convert int to string
int n = random(65,90); std::string str1=(__String::createWithFormat("%c",n)->getCString()); you may visit this link for more methods https://www.geeksforgeeks.org/what-is-the-best-way-in-c-to-convert-a-number-to-a-string/
to_stringlikestd::string s = std::to_string(42)