C++的sstream标准库-istringstream/ostringstream/stringstream3个类的介绍和使用方法的总结

C++的<sstream>标准库介绍 

    C++中有ostringstream(C++串流的输入)、istringstream(C++串流的输出)、stringstream(C++串流的输入/输出)这三个类,要使用他们创建对象就必须包含<sstream>头文件。其次是上述3种类中,在构建字符串流的时候,空格会成为字符串中参数的内部分界

    由于stringstream可以对串流进行输入/输出其功能,在各方面上可以看作 istringstreamostringstream的结合版并且还有余!所以本文重点以stringstream介绍和讲解;本文代码加以修改即可套入istringstreamostringstream中应用。

stringstream用处(一):字符串中识别数字,并累加

原理:利用其空格会成为字符串中参数的内部分界

#include <iostream> 
#include <sstream> 
using namespace std; 
int main()   
{ 
      //方案(一):              方案(二):
	char s[100];             // string s;        
	gets(s);                 // getline(cin,s);  
	stringstream ss(s);      // stringstream ss(s);
	int sum=0,x;             // int sum=0,x;
	while(ss>>x)             // while(ss>>x)
	    sum+=x;              //     sum+=x;
	cout<<"sum="<<sum<<endl; // cout<<"sum="<<sum<<endl;
	return 0;                // return 0;
}

方案(一)运行结果如图:

其两方案差别不大,主要是在屏幕上显示时候不一样,以及对内存的考虑。若使用方案(二)中的string s和getline()函数将不用在意内存问题,反观gets(s)若不注意有可能会引起问题。因为gets()函数能无限输入。但是若使用getline()其输入时候按下的第一次回车键(Enter)其不会保存入字符串s内,会丢弃并显示,只有按下第二次回车键(Enter),才会显示结果。所以读者可以根据所需考虑使用何种函数,不一定是上述两种方案,其他的输入函数也可。

stringstream用处(二):string与各种内置类型转换

原理:利用其流式输入和利用其空格会成为字符串中参数的内部分界

#include <iostream> 
#include <sstream> 
using namespace std; 
int main()   
{ 
	string s="10 3.14159 A";
	int a1;
	double a2;
	char a3;
	stringstream ss(s);
	ss>>a1;
	cout<<"a1="<<a1<<endl;//将"10"转为string型
	//ss.clear(); 注意!
	ss>>a2;
	cout<<"a2="<<a2<<endl;//将"3.14159"转为double型
	//ss.clear(); 注意!
	ss>>a3;
	cout<<"a3="<<a3<<endl;//将"A"转为char型
	return 0;
}

运行结果如图:

上述代码实现了string对各种类型的转换,但是需要特别注意的是:在本代码中clear()函数被注释掉没有造成影响,但在平时习惯中应当每使用一次stringstream类就用一次clear()函数,因为在多次转换中重复使用同一个stringstream(而不是每次都创建一个新的对象)对象最大的好处在于效率。stringstream对象的构造和析构函数通常是非常耗费CPU时间的,并且有可能会出现标志符号出错,导致程序结构不如所意。

对于clear()函数来说它实际上并不清除任何内容,它只是重置了流的状态标志而已!


本文在本人初涉C++时所学,参考了大量网上资料学习总结归化而得,内容完全按本人个人所理解所写,若有出错敬请纠正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值