将int转换为C ++字符串的最简单方法

int转换为C ++中的等效string的最简单方法是什么? 我知道两种方法。 有没有更简单的方法?

(1)

int a = 10;
char *intStr = itoa(a);
string str = string(intStr);

(2)

int a = 10;
stringstream ss;
ss << a;
string str = ss.str();

C ++ 11引入了std::stoi (以及每种数字类型的变体)和std::to_string ,C atoiitoa的对应部分,但用std::string

#include <string> 

std::string s = std::to_string(42);

因此是我能想到的最短路线。 您甚至可以使用auto关键字省略命名类型:

auto s = std::to_string(42);

注意:请参阅[string.conversions] (n3242中的21.5


几年后,在@ v.oddou的讨论中,C ++ 17终于提供了一种方法来完成最初的基于宏的解决方案(保留在下面),而不会遇到宏观丑陋。

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

用法:

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 ) );

原始答案:

由于“将...转换为字符串”是一个反复出现的问题,因此我总是在我的C ++源代码的中心头文件中定义SSTR()宏:

#include <sstream>

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

用法很简单:

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 ) );

以上是C ++ 98兼容(如果你不能使用C ++ 11 std::to_string ),并且不需要任何第三方包含(如果你不能使用Boost lexical_cast<> ); 但这两种解决方案都有更好的表现。


我通常使用以下方法:

#include <sstream>

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

在这里详细描述。

链接地址: http://www.djcxy.com/p/20965.html

上一篇: Easiest way to convert int to string in C++

下一篇: string is not a member of std, says g++ (mingw)