基于C++11标准
如果你用的编译器是基于最新的C++11标准,那么这个问题就变的很简单,因为<string>中已经封装好了对应的转换方法:
标准库中定义:
- to_string(val);将其它类型转换为string。
- stoi(s,p,b),将s转化成int
- stol(s,p,b),将s转化成long
- stod(s,p,b),将s转化成double
- stoi(s,p,b), 返回s的起始子串(表示整数内容的字符串)的数值,返回数值为int
- stol(s,p,b), 返回s的起始子串(表示整数内容的字符串)的数值,返回数值为long
- stoul(s,p,b),返回s的起始子串(表示整数内容的字符串)的数值,返回数值为unsigned long
- stoll(s,p,b),返回s的起始子串(表示整数内容的字符串)的数值,返回数值为long long
- stoull(s,p,b),返回s的起始子串(表示整数内容的字符串)的数值,返回数值为unsigned long long
- stof(s, p), 返回s的起始子串(表示浮点数内容)的数值,返回值的类型是float
- stod(s, p), 返回s的起始子串(表示浮点数内容)的数值,返回值的类型是double
- stold(s, p); 返回s的起始子串(表示浮点数内容)的数值,返回值的类型是long double
其中b表示转换所用的基数,默认为10(表示十进制).p是size_t的指针,用来保存s中第一个非数值字符的下标,p默认为0,即函数不返回下标.
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