前言

c++课学到的,超级实用~支持各种类型的数字与字符串之间的转换,下面以intdouble类型举例

头文件

1
2
#include <iostream>
#include <sstream>

模板函数

数字->字符串的模板函数:

1
2
3
4
5
6
7
template <class T>
inline string toString(T data) // inline: 内联函数
{
ostringstream os; // 定义字符串输出流对象存储数字
os << data;
return os.str();
}

字符串->数字的模板函数:

1
2
3
4
5
6
7
8
template <class T>
inline T toNum(const string str)
{
T data;
istringstream is(str); // 定义字符串输入流对象并存入字符串
is >> data;
return data;
}

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <sstream>

using namespace std;

template <class T>
inline string toString(T data)
{
ostringstream os;
os << data;
return os.str();
}

template <class T>
inline T toNum(const string str)
{
T data;
istringstream is(str);
is >> data;
return data;
}

int main()
{
string str, str_;
double n;
int m;
cout << "请输入一个数字:";
cin >> str;

cout << "现在是字符串类型的我:" << str << endl;

n = toNum<double>(str); // 注意使用尖括号标明模板类型
cout << "现在是double类型的我:" << n << endl;

m = toNum<int>(str);
cout << "现在是int类型的我:" << m << endl;

str_ = toString(n); // 数据传入后会自动判断数据类型所以不需要使用尖括号标注
cout << "现在又是字符串类型的我:" << str_ << endl;

str_ = toString(m);
cout << "现在还是字符串类型的我:" << str_ << endl;

return 0;
}
测试结果