天天看点

字符串流 istringstream ostringstream stringstream字符串流 istringstream ostringstream stringstream

字符串流 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标志。