1. 说明
之前介绍过“stdio.h”中sprintf来格式化完成类型转换,可以实现从其它类型转换为字符数组数据。但是这个函数有它本身的限制,不仅是只能其它格式转换为字符数组类型,而且会受限于格式符使用,容易带来意想不到的错误。而本次介绍的“sstream”头文件库可以对类型转换简化很多,并且各种类型之间都可以通过sstream中类实例化对象作为中介来完成相互转换。你可以将其看成是“iostream”中流输入输出功能类似,一个是从终端读出写入,而另一个是从sstream库中类实例化的对象中读出写入。
“sstream”库定义了三种类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入/输出操作。所以一般情况下我们直接通过stringstream实例化对象来即可,同时可以完成输入和输出。
2. 笔试必掌握内容
“sstream”头文件我们只需清楚熟悉怎样来完成传递作用,从而能够向该类对象中读入和写入流数据,完成类型任意转换即可。另外使用前一定记住要标明命名空间是标准库std。
下面直接通过程序来探讨它的使用。
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
char nzArr[10] = "aaa";
string str1 = nzArr;
int nNum = 1111;
string str2("12234");
stringstream strStream(str2);//实例化对象并且初始化
strStream.clear(); //每次再次调用无需重新定义stringstream类一个对象,只要清空再使用即可
strStream << nNum;
strStream >> nzArr;
strStream >> str1;
return 0;
}
①. 先通过stringstream类实例化一个对象,并且可以通过任何类型直接初始化赋初值。
②. clear()类方法可以清空类实例化的对象,这样就可以保证每次使用,无需重新实例化一个对象。此外clear()也是为了保证实对象再赋值引起不必要的错误。例如:
char nzArr[] ="1111";
char nzBuf[10];
stringstream stream(nzArr);
stream << "22";
stream >> nzBuf; //nzBuf结果并不仅是“22”,而且是“2211”
③. stringstream类实例化对象可以直接通过提取操作符“>>”、“<<”来完成对该对象的读取和写入。另外流操作没有类型限制,包括bool布尔类型,它的提取可以对任何类型完成。
stringstream sRel;
stream << true; //插入bool值
stream >> sRel; //提取出int
cout << sRel << endl;//输出为1
它在IT笔试中使用可以参考这篇博文的介绍:
http://blog.csdn.net/fx677588/article/details/52713623 华为2017校园招聘编程题——去除一段话字符串中重复单词
个人学习记录,由于能力和时间有限,如果有错误望读者纠正,谢谢!