使用流对象 istringstream和ostringstream,可以将string对象当做一个流,进行输入和输出。使用这两个类需要包含头文件sstream。
示例:
1. #include<iostream>
2. #include<sstream>
3. #include<string>
4. using namespace std;
5. int main()
6. {
7. string src("Avatar 123 5.2 Titanic K");
8. istringstream istrStream(src); //建立src到istrStream的联系
9. string s1,s2;
10. int n;
11. double d;
12. char c;
13. istrStream>>s1>>n>>d>>s2>>c; //把src的内容当做输入流进行读取
14. ostringstream ostrStream;
15. ostrStream<<s1<<endl<<s2<<endl<<n<<endl<<d<<endl<<c<<endl;
16. cout<<ostrStream.str();
17. return 0;
18.}
程序的输出结果:
Avatar
Titanic
123
5.2
Kv
第13行,从输入流istrStream进行读取,过程和从cin读取一样,只不过输入的来源由键盘变成了string对象src。因此“Avatar”被读取到s1,123被读取到n,5.2被读取到d,“Titannic”被读取到s2,‘K’被读取到c。
第14行输出到流ostrStream。输出结果不会出现在屏幕上,而是被保存在ostrStream对象管理的某处。用ostringStream的string str() const成员函数,就能将输出到ostringStream对象中的内容提取出来。
例题:
AcWing 770. 单词替换
刚开始觉着,如果先输入a,b,再输入s,那么读入一个单词就和a比较一下,如果相当就输出b,如果不相等就输出a。但这是先输入s。其实呢,上面这个问题可以解决,那就是用流。
#include<iostream>
#include<cstring>
#include<sstream>
using namespace std;
int main()
{
string s,a,b;
getline(cin,s);
cin>>a>>b;
stringstream ssin(s);
string str;
while(ssin>>str)
if(str==a) cout<<b<<" ";
else cout<<str<<" ";
return 0;
}