C++ int、double、string、char*互相转换
int to string
//方式一:
int a = 10;
char *intStr = itoa(a);
string str = string(intStr);
//方式二:
int a = 10;
stringstream ss;
ss << a;
string str = ss.str();
//方式三:需支持C++11(推荐)
#include <string>
std::string s = std::to_string(42);
//方式四:C++ 98即可(不支持C++11就用这个或者方式二)
#include <sstream>
#define SSTR( x ) static_cast< std::ostringstream & >( \
( std::ostringstream() << std::dec << x ) ).str()
//方式五: Boost
#include <boost/lexical_cast.hpp>
int num = 4;
参考文章:int转string的多种方式
double to string
//
#include <string>
#include <sstream>
//方法一:std::to_string(需支持c++11)
std::string DoubleToStringByStdToString(double value)
{
const std::string& new_val = std::to_string(value);
return new_val;
}
//方法二:std::ostringstream
std::string DoubleToStringByStringStream(double value)
{
std::ostringstream stream;
stream << value;
return stream.str();
}
使用方法一(std::to_string)得到的结果保留小数点后6位;
使用方法二(std::ostringstream)默认保留六位数字(小数和整数),精度可设置。
可利用std::ostringstream封装一个函数可方便设置转换精度:
//设置保留数字个数(整数和小数)
std::string DoubleToString(const double value, unsigned int precision)
{
std::ostringstream out;
if (precision > 0)
out.precision(precision);
out << value;
return out.str();
}
//设置小数点后保留位数
std::string DoubleToString(const double value, unsigned int precisionAfterPoint=6)
{
std::ostringstream out;
// 清除默认精度
out.precision(std::numeric_limits<double>::digits10);
out << value;
std::string res = std::move(out.str());
auto pos = res.find('.');
if (pos == std::string::npos)
return res;
auto splitLen = pos + 1 + precisionAfterPoint;
if (res.size() <= splitLen)
return res;
return res.substr(0, splitLen);
}
参考文章:
C++11 double转化为string
istringstream、ostringstream、stringstream 类介绍
string to int/double
string to int
std::string s="233";
int i=atoi(s.c_str());
string to double
std::string s="3.141592";
double d=atof(s.c_str());