将int转换为std :: string

时间:2011-01-12 12:26:09

标签: c++ string int

将int转换为字符串的最短路径是什么,最好是内联的?使用stl和boost的答案将受到欢迎。

11 个答案:

答案 0 :(得分:314)

您可以在C ++ 11中使用std::to_string

int i = 3;
std::string str = std::to_string(i);

答案 1 :(得分:45)

#include <sstream>
#include <string>
const int i = 3;
std::ostringstream s;
s << i;
const std::string i_as_string(s.str());

答案 2 :(得分:36)

来自boost::lexical_cast<std::string>(yourint)

boost/lexical_cast.hpp

使用std :: ostream支持工作,但速度不如itoa

它甚至看起来比stringstream或scanf更快:

答案 3 :(得分:30)

众所周知的方法是使用流操作符:

#include <sstream>

std::ostringstream s;
int i;

s << i;

std::string converted(s.str());

当然,您可以使用模板函数^^

对任何类型进行概括
#include <sstream>

template<typename T>
std::string toString(const T& value)
{
    std::ostringstream oss;
    oss << value;
    return oss.str();
}

答案 4 :(得分:14)

如果您不能使用C ++ 11中的std::to_string,您可以按照cppreference.com上的定义编写它:

  

std::string to_string( int value )   将带符号的十进制整数转换为一个字符串,其内容与std::sprintf(buf, "%d", value)为足够大的buf产生的内容相同。

实施

#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;
}

你可以用它做更多的事情。只需使用"%g"将float或double转换为字符串,使用"%x"将int转换为十六进制表示,依此类推。

答案 5 :(得分:13)

非标准功能,但它在大多数常见编译器上实现:

int input = MY_VALUE;
char buffer[100] = {0};
int number_base = 10;
std::string output = itoa(input, buffer, number_base);

<强>更新

C ++ 11引入了几个std::to_string重载(注意它默认为base-10)。

答案 6 :(得分:8)

以下宏不像一次性使用ostringstreamboost::lexical_cast那么紧凑。

但是如果你需要在你的代码中重复转换为字符串,那么这个宏在使用上比直接处理字符串流或每次显式转换都更优雅。

非常多才多艺,因为它可以转换operator<<()支持的所有,即使是组合使用。

定义:

#include <sstream>

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

<强>解释

std::dec是一种无副作用的方式,可以将匿名ostringstream转换为通用ostream,因此operator<<()函数查找可以正常运行所有类型。 (如果第一个参数是指针类型,则会遇到麻烦。)

dynamic_cast会将类型返回ostringstream,因此您可以在其上调用str()

使用:

#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;
}

答案 7 :(得分:0)

您可以在项目中包含itoa的实施 这是itoa修改为使用std :: string:http://www.strudel.org.uk/itoa/

答案 8 :(得分:0)

在包含VarDeclaration: VAR VarSpec | ID Type | ID COMMA ID auxVarSpec Type 之后,您可以使用此功能将int转换为std::string

<sstream>

答案 9 :(得分:-2)

假设我有integer = 0123456789101112。现在,这个整数可以由stringstream类转换为字符串。

以下是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;

    }

答案 10 :(得分:-2)

#include <string>
#include <stdlib.h>

这是将int转换为字符串的另一种简单方法

int n = random(65,90);
std::string str1=(__String::createWithFormat("%c",n)->getCString());

您可以访问此链接以获取更多方法 https://www.geeksforgeeks.org/what-is-the-best-way-in-c-to-convert-a-number-to-a-string/