sstream

205 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

1 概述

定义了三个类:istringstream、ostringstream 和 stringstream,分别用来进行流的输入、输出和输入输出操作。本文以 stringstream 为主,介绍流的输入和输出操作。

主要用来进行数据类型转换,由于 使用 string 对象来代替字符数组(snprintf方式),就避免缓冲区溢出的危险;而且,因为传入参数和目标对象的类型会被自动推导出来,所以不存在错误的格式化符的问题。简单说,相比c库的数据类型转换而言, 更加安全、自动和直接。

2 代码示例

2.1 数据类型转换

这里展示一个代码示例,该示例介绍了将 int 类型转换为 string 类型的过程。示例代码(stringstream_test1.cpp)如下:

#include #include #include #include <stdio.h> using namespace std; int main() { stringstream sstream; string strResult; int nValue = 1000; // 将int类型的值放入输入流中 sstream << nValue; // 从sstream中抽取前面插入的int类型的值,赋给string类型 sstream >> strResult; cout << "[cout]strResult is: " << strResult << endl; printf("[printf]strResult is: %s\n", strResult.c_str()); return 0; }

strResult.c_str()的介绍

c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同. 这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。

sstream即字符串流.

sstream有三种类:ostringstream:用于输出操作,istringstream:用于输入操作,stringstream:用于输入输出操作

一般来说直接用第三个就可以解决问题了

基本操作:

stringstream buff;

str为一个重载函数

buff.str() 将buff里面的内容当做一个string返回 返回后buff里面的内容就相当于被拿走了

buff.str("....") 对buff赋值 buff.str("")也可以清空buff str函数原型为

buff.clear() 清空buff

可以使用流操作符>>和<<, 类比cin,cout.

建议在多次转换中重复使用同一个stringstream(而不是每次都创建一个新的对象),而在中间使用clear()函数清空.stringstream对象的构造和析构函数通常是非常耗费CPU时间的.

sstream最重要的功能是转换数据类型

想将string型转为int

//string型转为int stringstream ss; string s; int num; cin>>s; ss<<s; ss>>num; cout<<num<<endl;

其他类型则类似

注意:ss.str()的参数不能是其他数据类型,如整形

使用ss<<的参数类型可以是多种

ss>>的参数类型也可以是多种

ss使用运算符<<和>>和cin,cout差不多,ss<<的时候,遇到空格则结束读取

ss>>的时候,遇到空格也会结束读取

当读取结束的时候,会返回EOF(-1)文件结束标志