sstream

  1. #include <iostream>
    #include <string>
    #include <sstream>
    using namespace std;
    
    int main()
    {
        int a, b;
        string Str1, Str2;
        string Input = "abc 123 bcd 456 sss 999";
       
        //ostringstream 对象用来进行格式化的输出,可以方便的将各种类型转换为string类型
        //ostringstream 只支持 << 操作符
        //格式化输出
        ostringstream oss;
        oss << 3.14;
        oss << "  ";
        oss << 55555555;
        oss << endl;
        cout  << oss.str();
       
        //double型转化为字符串
        oss.str("");//每次使用前清空,oss.clear() 并不能清空内存
        oss << 3.1234234234;
        Str2 = oss.str();
        cout << Str2 << endl;
    
        //int型转化为字符串
        oss.str("");
        oss << 1234567;
        Str2 = oss.str();
        cout << Str2 << endl;
    
       
        //istringstream 对象用来把一个已定字符串中的以空格隔开的内容提取出来
        //istringstream 只支持 >> 操作符
    
        istringstream iss(Input);//通过构造函数对istringstream类进行赋值,可以将一个字符串变量的值传递给istringstream对象
        //若传入的字符串是常量,也可以进行如下赋值
        //iss.str("ccc 555 aaa 333");
        //扩展,iss对象支持对C语言流的操作,所以也可以进行如下的赋值
        //iss.str(Input.c_str());
        while(iss >> Str1 >> a)
        {
            cout << Str1 << "  " << a << endl;
        }
    
        //stringstream类
        //该类就是上述istringstream和ostringstream类的综合,支持<<, >>操作符,可以进行字符串到其它类型的快速转换
        stringstream ss;
        ss << Input;
        while(ss >> Str1 >> a)
        {
            cout << Str1 << " " << a << endl;
        }
    
        //总结这几个类istringstream, ostringstream, stringstream, 包含在<sstream>文件里
        //输入方式:
        //1.构造函数。iss, oss, ss 都支持。eg. istreamstring iss(Input), ostreamstring(Input), stringstream ss(Input)
        //2.<< 操作符。oss, ss 支持。 oss << Input, ss << Input;
        //3. .Str()函数,提供C中的字符串头指针,或者匿名内存首地址
        //  eg. iss.str(Input.c_str()), iss.str("abc 123 345")
        //      oss.str(Input.c_str()), oss.str("abc 123 345")
        //      ss.str(Input.c_str()), ss.str("abc 123 345")
    
        //输出方式:
        //1. 通过.str()得到一份拷贝
        //eg. Str1 = iss.str(), Str1 = oss.str(), Str1 = ss.str();
        // 显然,这个也提供C语言的接口
        //  printf("%s", iss.str().c_str()),  printf("%s", oss.str().c_str()),  printf("%s", ss.str().c_str())
        //2. >>操作符, iss和ss支持该操作
       
        //每次不同的使用时刻必须要清空
        //ss.str(""), iss.str(""), oss.str(""),暂时没有发现其它的清空方法
       
        //最大的用处
        //输入string类型,可以通过iss 或 ss 类提取出来,功能类似于C语言中的sscanf()函数, 在TC中比较常见
        //提供字符串和各种类型之间的转换
        return 0;
    }
    以下是自己写的练习程序
     
    #include <iostream>
    #include <string>
    #include <sstream>
    using namespace std;
    
    int main()
    { 
     //istringstream用法
     istringstream iss;
     string istr1,istr2,istr3;
     int a;
     
     //输入字符串
     iss.str("I love Ziyu");
     iss>>istr1>>istr2>>istr3;
     cout<<istr1<<" "<<istr2<<" "<<istr3<<endl;
     
     // 字符串转换为int
     iss.clear();
     iss.str("1534");
     iss>>a;
     cout<<a<<endl;
     //用C测试转换
     printf("%d\n",a);
     
     
     //ostringstream用法
     ostringstream oss;
     string ostr1,ostr2,ostr3;
     string ostr;
     string strFromInt;
     string strFromDouble;
    
     //输出字符串
     ostr1="My ";
     ostr2="Name's ";
     ostr3="Steve";
     oss<<ostr1;
     oss<<ostr2;
     oss<<ostr3;
     cout<<oss.str()<<endl;
     ostr=oss.str(); 
     cout<<ostr<<endl;
     //int 转化为string
     oss.str("");
     oss<<23412;
     strFromInt=oss.str();
        cout<<strFromInt<<endl;
     //double 转化为string
     oss.str("");
     oss<<1.2345;
     strFromDouble=oss.str();
     cout<<strFromDouble<<endl;
     
     //将string型赋给char型。关键:c_str函数的返回值是const char*的,不能直接赋值给char*,必须赋给const char*
     const char *I=strFromInt.c_str();
     const char *D=strFromDouble.c_str();
     printf("%s,%s\n",I,D);
     return 0;
    }


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值