今天看书看到了strintstream,感觉用起来很方便,尤其是将数值转换为字符串的时候使用stringstream,可以达到非常美妙的效果。对比前面我的一篇文章--如何将数字转换为字符串,使用#的方法,使用stringstream也是一种很好的选择。
废话不多说,直接看代码吧。
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;

}
这样就解决了我们在程序中经常遇到的字符串到数值的转换问题。