C/C++笔试必须熟悉掌握的头文件系列(六)——sstream

1. 说明

  之前介绍过“stdio.h”中sprintf来格式化完成类型转换,可以实现从其它类型转换为字符数组数据。但是这个函数有它本身的限制,不仅是只能其它格式转换为字符数组类型,而且会受限于格式符使用,容易带来意想不到的错误。而本次介绍的“sstream”头文件库可以对类型转换简化很多,并且各种类型之间都可以通过sstream中类实例化对象作为中介来完成相互转换。你可以将其看成是“iostream”中流输入输出功能类似,一个是从终端读出写入,而另一个是从sstream库中类实例化的对象中读出写入。
  “sstream”库定义了三种类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入/输出操作。所以一般情况下我们直接通过stringstream实例化对象来即可,同时可以完成输入和输出。

2. 笔试必掌握内容

  “sstream”头文件我们只需清楚熟悉怎样来完成传递作用,从而能够向该类对象中读入和写入流数据,完成类型任意转换即可。另外使用前一定记住要标明命名空间是标准库std。
  下面直接通过程序来探讨它的使用。

#include 
#include 
#include 
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校园招聘编程题——去除一段话字符串中重复单词


个人学习记录,由于能力和时间有限,如果有错误望读者纠正,谢谢!

转载请注明出处:CSDN 无鞋童鞋。

你可能感兴趣的:(C/C++必掌握头文件系列,C/C++笔试必掌握头文件,sstream,c++,c语言基础,头文件,标准库函数)