前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++之类型转换利器-stringstream

C++之类型转换利器-stringstream

作者头像
horsley
发布2022-08-16 10:44:01
4930
发布2022-08-16 10:44:01
举报
文章被收录于专栏:每个用户仅限创建一个专栏

istringstream, ostringstream, stringstream用法示例

  1. #include <iostream>
  2. #include <string>
  3. #include <sstream>
  4. using namespace std;
  5. int main()
  6. {
  7.     int a, b;
  8.     string Str1, Str2;
  9.     string Input = “abc 123 bcd 456 sss 999”;
  10.     //ostringstream 对象用来进行格式化的输出,可以方便的将各种类型转换为string类型
  11.     //ostringstream 只支持 << 操作符
  12.     //格式化输出
  13.     ostringstream oss;
  14.     oss << 3.14;
  15.     oss << ”  “;
  16.     oss << 55555555;
  17.     oss << endl;
  18.     cout  << oss.str();
  19.     //double型转化为字符串
  20.     oss.str(“”);//每次使用前清空,oss.clear() 并不能清空内存
  21.     oss << 3.1234234234;
  22.     Str2 = oss.str();
  23.     cout << Str2 << endl;
  24.     //int型转化为字符串
  25.     oss.str(“”);
  26.     oss << 1234567;
  27.     Str2 = oss.str();
  28.     cout << Str2 << endl;
  29.     //istringstream 对象用来把一个已定字符串中的以空格隔开的内容提取出来
  30.     //istringstream 只支持 >> 操作符
  31.     istringstream iss(Input);//通过构造函数对istringstream类进行赋值,可以将一个字符串变量的值传递给istringstream对象
  32.     //若传入的字符串是常量,也可以进行如下赋值
  33.     //iss.str(“ccc 555 aaa 333”);
  34.     //扩展,iss对象支持对C语言流的操作,所以也可以进行如下的赋值
  35.     //iss.str(Input.c_str());
  36.     while(iss >> Str1 >> a)
  37.     {
  38.         cout << Str1 << ”  ” << a << endl;
  39.     }
  40.     //stringstream类
  41.     //该类就是上述istringstream和ostringstream类的综合,支持<<, >>操作符,可以进行字符串到其它类型的快速转换
  42.     stringstream ss;
  43.     ss << Input;
  44.     while(ss >> Str1 >> a)
  45.     {
  46.         cout << Str1 << ” ” << a << endl;
  47.     }
  48.     //总结这几个类istringstream, ostringstream, stringstream, 包含在<sstream>文件里
  49.     //输入方式:
  50.     //1.构造函数。iss, oss, ss 都支持。eg. istreamstring iss(Input), ostreamstring(Input), stringstream ss(Input)
  51.     //2.<< 操作符。oss, ss 支持。 oss << Input, ss << Input;
  52.     //3. .Str()函数,提供C中的字符串头指针,或者匿名内存首地址
  53.     //  eg. iss.str(Input.c_str()), iss.str(“abc 123 345”)
  54.     //      oss.str(Input.c_str()), oss.str(“abc 123 345”)
  55.     //      ss.str(Input.c_str()), ss.str(“abc 123 345”)
  56.     //输出方式:
  57.     //1. 通过.str()得到一份拷贝
  58.     //eg. Str1 = iss.str(), Str1 = oss.str(), Str1 = ss.str();
  59.     // 显然,这个也提供C语言的接口
  60.     //  printf(“%s”, iss.str().c_str()),  printf(“%s”, oss.str().c_str()),  printf(“%s”, ss.str().c_str())
  61.     //2. >>操作符, iss和ss支持该操作
  62.     //每次不同的使用时刻必须要清空
  63.     //ss.str(“”), iss.str(“”), oss.str(“”),暂时没有发现其它的清空方法
  64.     //最大的用处
  65.     //输入string类型,可以通过iss 或 ss 类提取出来,功能类似于C语言中的sscanf()函数, 在TC中比较常见
  66.     //提供字符串和各种类型之间的转换
  67.     return 0;
  68. }

以下是自己写的练习程序 #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; }

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2011 年 6 月 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档