Answers:
您可以在C ++ 11中使用std :: to_string
int i = 3;
std::string str = std::to_string(i);
boost::lexical_cast<std::string>(yourint)
从 boost/lexical_cast.hpp
借助std :: ostream支持,所有工作都可以完成,但是速度不如例如 itoa
它甚至似乎比stringstream或scanf更快:
lexical_cast
带来的好处,但是觉得Boost对于这种任务几乎是多余的……
众所周知的方法是使用流运算符:
#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();
}
#include <sstream>
。
std::
;)
如果无法std::to_string
从C ++ 11使用,则可以按照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转换为十六进制表示,依此类推。
非标准函数,但在大多数常见编译器上实现:
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
重载(请注意,默认情况下它以10为底)。
ostream
您需要将数字字符串另存为二进制,八进制或十六进制格式(例如,base-32)之前,该方法同样有效。
itoa()
或stricmp()
给出任何答案时,我不喜欢它。
sprintf
也可以实现OP的目标(尽管如果需要除通用基数以外的任何其他东西,仍然会缺乏灵活性)。
以下宏并不像一次性宏ostringstream
或那样紧凑boost::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;
}
inline template<class T> std::string SSTR( T x ) { return dynamic_cast< std::ostringstream & >( (std::ostringstream() << std::dec << x) ).str() }
吗?(未经测试,但我确实想知道会出什么问题,为什么呢?
int
(我的第一个例子)。但是,如果没有ostream
可见的编译器main
(因为它是在模板函数中隐藏),它会尝试查找operator<<()
了const char []
我的第二个例子-这将呱呱叫。我知道OP仅要求提供int
,但是这个更通用的宏是如此有用(实际上相当普遍),以至于我想将其包括在这里。
您可以在项目中包括itoa的实现。
这是itoa修改为可与std :: string一起使用:http : //www.strudel.org.uk/itoa/
#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/
假设我有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;
}