ostringstream、istringstream、stringstream 三者的区别

c++中输入输出流分三类:

        iostream 输入输出流

        fstream 文件流

        sstream 字符串流

继承关系

  • std::istringstream 字符串输入流,用于将字符串作为输入源,可以从字符串中读取数据

  • 可以使用 operator>> 类似于从标准输入流中读取数据,流到变量中

  • 主要用于从字符串中提取数据

  • int main() {
    	string name;
    	string sex;
    	int age;
    	istringstream f1("zhangsan man 20"); //输入字符串流对象,默认空白符分隔,将字符串作为输入流,用于拆分字符串
    	f1 >> name >> sex >> age; 
    	cout << name << sex << age << endl;/
    }

  • std::ostringstream 字符串输出流对象,用于将数据输出到字符串中

  • 可以使用 operator<< 类似于将数据输出到标准输出流中

  • 主要用于拼接字符串以供后续使用或输出

  • int main() {
    	ostringstream f2;//字符串输出流对象
    	f2 << 10 << "-" << "test" ;
    	cout << f2.str()<<endl;	//str()函数返回一个string对象,输出10-test
    }
  • std::stringstream 实际上同时具备了 std::istringstreamstd::ostringstream 的功能

  • 可以用作字符串输入流,也可以作为字符串输出流

  • int main(){
        /* stringstream拼接字符串*/
       string name("zhangsan");
       string age("23");
       string sex("man");
       stringstream sstr;
       sstr << name << age << sex; //将数据流到字符串流对象中,通过str()提取流中的字符串
       cout<<sstr.str();
    }
    int main(){ 
    /*stringstream拆分字符串*/
        string date = "2024 1 1";
        stringstream ostring(date); //用字符串构造字符串流对象
        string year;
        string month;
        string day;
        ostring >> year >> month>> day;//将流对象中的字符串流入到变量中,拆串
        cout <<"year=" <<year << "month="<<month <<"day ="<<day ;
    }
    /*循环拆串,默认空格*/
    int main()
    {
    	char s[] = {"dog cat cat dog"};
    	stringstream s1(s);
    	string temp;
    	while (s1 >> temp){ //s1 >> temp返回一个istream&输入流对象引用,支持链式调用,读取到字符串末尾时,返回失败状态,终止循环,可以用s1.fail()来判断状态
    		cout << temp<<endl;
    	}	
     
    /*while(!ostring.fail()){
            ostring >> temp;
            cout << temp;
        }*/
    }
    
        
    /*用指定分隔符拆串*/
    int main()
    {
        string str = "2024-08-15";
        stringstream ss(str);
        string temp;
        while (getline(ss,temp,'-')) { //用指定分隔符拆串,默认是空格,getline从ss流对象中读取字符串存放到temp中,读取流对象中字符串末尾的时候,返回错误状态,退出循环
            cout << temp;
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码成行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值