字符串流 istringstream ostringstream stringstream
iostream标准库支持内存中的输入输出,只要将流与存储在程序内存中的string对象捆绑起来即可,此时,可用iostream输入和输出操作符来读写这个string对象。
标准库定义了三种类型的字符串流:
l istringstream 由istream派生而来,提供读string的功能
l ostringstream 由ostream派生而来,提供写string的功能
l stringstream 由iostream派生而来,提供读写string的功能
包含头文件 #include <sstream>
stringstream特定的操作
stringstream ss; | 创建自由的stringstream对象 |
stringstream ss(str); | 创建str副本的stringstream对象 |
ss.str() | 返回ss中存储的string类型对象 |
ss.str(str); | 将string类型的str赋值给ss,返回void |
stringstream对象的使用
可以先读入一行内容到内存string对象中,然后再拆分数据项。
string str;
int n,a,b,c;
stringstream ss;
while (1)
{
getline(cin,str,';'); // 读入以";"结束的一行到str中
ss.clear(); // 多次转换前,先清io标志
ss.str(str); // 这里 ss.str() 里就只有 str 了
//ss<<str; // 这里的 ss.str() 里还保留了以前的输出内容
ss>>a>>b>>c; // 从stringstream对象中读入int数据,无论上面哪种,都不影响这里的读入
cout<<" "<<a<<" "<<b<<""<<c<<endl;
cout<<"src str : "<<str<<endl;
cout<<"stream str : "<<ss.str()<<endl;
}
stringstream提供的转换和格式化
value->string
int value = 12345;
ss<<value; //向流中传值
string str12345 = ss.str(); // 转换后的string对象 str12345 == “12345”
cout<<str12345<<endl;
string -> value
ss<<"value: "<<value;
string dump;
int x;
ss>>dump>>x;
cout<<dump<<endl; // "value: "
cout<<x<<endl;
在这里,<<将数据输出到string对象(相当于cout输出到控制台),而>>从string对象里读出数据。
注意:>> 默认的分隔符也是空格 tab 和换行。
多次转换之间,先调用clear()清除io标志。