C++中STL之stringstream的使用总结

写在前面:之前一直都很习惯使用中的格式转换,但是很不方便,做题的时候用起来很容易出错,今天系统总结一下c++中的用法

  • 首先来认识一下std::basic_stringstream
    类模板 std::basic_stringstream 实现基于字符串的流上的输入与输出操作。它等效地存储一个 std::basic_string 的实例,并在其上进行输入与输出操作。定义域头文件
    在底层,该类实际上包装 std::basic_stringbuf 的未处理字符串设备到 std::basic_iostream 的高层接口中。提供到独有 std::basic_stringbuf 成员的完整接口。
  • 库中声明的标准类是自动选择所必需的转换。而且, 转换结果保存在stringstream对象的内部缓冲中。不必担心缓冲区溢出,因为这些对象会根据需要自动分配存储空间。
  • 库定义了三种类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作。另 外,每个类都有一个对应的宽字符集版本。简单起见,我主要以stringstream为中心,因为每个转换都要涉及到输入和输出操作。
    注意,使用string对象来代替字符数组。这样可以避免缓冲区溢出的危险。而且,传入参数和目标对象的类型被自动推导出来,即使使用了不正确的格式化符也没有危险。
  • 重复利用stringstream对象中需要注意的,如果你打算在多次转换中使用同一个stringstream对象,记住再每次转换前要使用clear()方法;在多次转换中重复使用同一个stringstream(而不是每次都创建一个新的对象)对象最大的好处在于效率。stringstream对象的构造和析构函数通常是非常耗费CPU时间的。
  • 接下来是测试用例,包括string和int之间的转换以及算法中经常用到的如何将一个包含空格的string以空格为间隔分别输出。
#include <iostream>
#include <cstdio>
#include <sstream>
#include <string>
#include <typeinfo>  //输出类型
using namespace std;
int main()
{
	string s="1000";
	int a=0;
	stringstream ss;
	//string 到int的转换 
	ss<<s;
	ss>>a;
	cout<<a<<" a的类型是"<<typeid(a).name()<<endl;
	ss.clear();  //清除ss中的内容以便再次使用
	//int 到string的转换 
	int b=2000;
	string s1;
	ss<<b;
	ss>>s1;
	cout<<b<<" b的类型是"<<typeid(b).name()<<endl;
		ss.clear();
	string s2="你好啊 我是 哈哈";
	string buf;
	ss<<s2;
	while (ss>>buf) cout<<buf<<endl; 
	return 0;
} 

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值