各种基本类型与string的转换


基于C++11标准

如果你用的编译器是基于最新的C++11标准,那么这个问题就变很简单,因为<string>已经封装好了对应的转换方法:

标准库中定义了to_string(val);可以将其它类型转换为string。还定义了一组stoi(s,p,b)、stol(s,p,b)、stod(s,p,b)等转换函数,可以函数,可以分别转化成int、long、double等.

   stoi(s,p,b);stol(s,p,b);stoul(s,p,b);stoll(s,p,b);stoull(s,p,b);返回s的起始子串(表示整数内容的字符串)的数值,返回值的类型分别为:int、long、unsigned long、long long、unsigned long long.其中b表示转换所用的基数,默认为10(表示十进制).p是size_t的指针,用来保存s中第一个非数值字符的下标,p默认为0,即函数不返回下标.

   stof(s, p); stod(s, p); stold(s, p); 返回s的起始子串(表示浮点数内容)的数值,返回值的类型分别是float、double、long double.参数p的作用与整数转换函数中的一样。


VS2013下编译通过

void testTypeConvert()
{
	//int --> string
	int i = 5;
	string s = to_string(i);
	cout << s << endl;
	//double --> string
	double d = 3.14;
	cout << to_string(d) << endl;
	//long --> string
	long l = 123234567;
	cout << to_string(l) << endl;
	//char --> string
	char c = 'a';
	cout << to_string(c) << endl;	//自动转换成int类型的参数
	//char --> string
	string cStr; cStr += c;
	cout << cStr << endl;


	s = "123.257";
	//string --> int;
	cout << stoi(s) << endl;
	//string --> int
	cout << stol(s) << endl;
	//string --> float
	cout << stof(s) << endl;
	//string --> doubel
	cout << stod(s) << endl;
}

结果如下:

5

3.140000

123234567

97

a

 

123

123

123.257

123.257

 

C++11标准之前

C++11标准之前没有提供相应的方法可以调用,就得自己写转换方法了,代码如下:

从其它类型转换为string,定义一个模板类的方法。

string转换为其它类型,定义多个重载函数。

 

VS2010下编译通过

#include <strstream>
template<class T>
string convertToString(const T val)
{
	string s;
	std::strstream ss;
	ss << val;
	ss >> s;
	return s;
}


int convertStringToInt(const string &s)
{
	int val;
	std::strstream ss;
	ss << s;
	ss >> val;
	return val;
}

double convertStringToDouble(const string &s)
{
	double val;
	std::strstream ss;
	ss << s;
	ss >> val;
	return val;
}

long convertStringToLong(const string &s)
{
	long val;
	std::strstream ss;
	ss << s;
	ss >> val;
	return val;
}

void testConvert()
{
	//convert other type to string
	cout << "convert other type to string:" << endl;
	string s = convertToString(44.5);
	cout << s << endl;
	int ii = 125;
	cout << convertToString(ii) << endl;
	double dd = 3.1415926;
	cout << convertToString(dd) << endl;

	//convert from string to other type
	cout << "convert from string to other type:" << endl;
	int i = convertStringToInt("12.5");
	cout << i << endl;
	double d = convertStringToDouble("12.5");
	cout << d << endl;
	long l = convertStringToLong("1234567");
	cout << l << endl;
}

结果如下: 

convert other type to string:

44.5

125

3.14159

convert from string to other type:

12

12.5

1234567






欢迎加入"C/C++梦之队" 学习群:226157456





评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陌尘(MoChen)

爱打赏的人技术成长更开哦~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值