废话不多说,直接看代码吧。
main.cpp文件:
#include <iostream>
#include <sstream>
using
namespace
std;
int
main()
{
stringstream ss;
//流输出
ss <<
“there are ”
<< 100 <<
” students.”
;
cout << ss.str() << endl;
int
intNumber = 10;
//int型
ss.str(“”);
ss << intNumber;
cout << ss.str() << endl;
float
floatNumber = 3.14159f;
//float型
ss.str(“”);
ss << floatNumber;
cout << ss.str() << endl;
int
hexNumber = 16;
//16进制形式转换为字符串
ss.str(“”);
ss << showbase << hex << hexNumber;
cout << ss.str() << endl;
return
0;
}
输出结果如下:
there are 100 students.
10
3.14159
0x10
可以看出使用stringstream比较使用#的好处是可以格式化数字,以多种形式(比如十六进制)格式化,代码也比较简单、清晰。
同样,可以使用stringstream将字符串转换为数值:
#include <iostream>
#include <sstream>
using
namespace
std;
template<
class
T>
T strToNum(
const
string
& str)
//字符串转换为数值函数
{
stringstream ss(str);
T temp;
ss >> temp;
if
( ss.fail() ) {
string
excep =
“Unable to format ”
;
excep += str;
throw
(excep);
}
return
temp;
}
int
main()
{
try
{
string
toBeFormat =
“7”
;
int
num1 = strToNum<
int
>(toBeFormat);
cout << num1 << endl;
toBeFormat =
“3.14159”
;
double
num2 = strToNum<
double
>(toBeFormat);
cout << num2 << endl;
toBeFormat =
“abc”
;
int
num3 = strToNum<
int
>(toBeFormat);
cout << num3 << endl;
}
catch
(
string
& e) {
cerr <<
“exception:”
<< e << endl;
}
return
0;
}
这样就解决了我们在程序中经常遇到的字符串到数值的转换问题。
转载于:https://blog.51cto.com/panpan/107732