目录

一、概念

二、基本功能

功能一:预定的格式将程序中的数据保存在一个string 中

功能二:实现类型转换

功能三:实现任意类型转换

三、重要功能

1.数字由空格或逗号分开。

2.数字由逗号分开

3.数字间不止一类符号分隔


一、概念

C++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含sstream.h头文件。

istringstream类用于执行C++风格的串流的输入操作。 
ostringstream类用于执行C风格的串流的输出操作。 
strstream类同时可以支持C风格的串流的输入输出操作。

istringstream类是从istream和stringstreambase派生而来,ostringstream是从ostream和 stringstreambase派生而来, stringstream则是从iostream类和stringstreambase派生而来。

他们的继承关系如下图所示:

istringstream是由一个string对象构造而来,istringstream类从一个string对象读取字符。 
istringstream的构造函数原形如下:

istringstream::istringstream(string str);

C++ stringstream 类是一种十分有用的类,特别是当我们需要在程序中使用字符串和数字数据的时候。要想在程序中使用 stringstream 类,我们需要在源程序文件中包含头文件include<sstream>。stringstream 对象的使用方法与cout对象的使用方法基本相同。stringstream 类提供的函数,将数字化转化为字符串。

当我们需要按预定的格式将程序中的数据保存在一个string 中的时候,可以先创建一个stringstream 对象,并通过运算符 ”<<“ 将数据传递给 stringstream 对象。(这与通过”<<“ 使用cout 对象的方法相同。)接着,我们可以通过调用stringstream 类的函数str() 将对象所包含的内容赋给一个string对象。在一下的程序中,我们先将数据传递给一个stringstream 对象,然后通过该 stringstream 对象将数值赋给一个string 对象。住:cout能使用的所有ios格式标记也可以在stringstream 对象中使用。

二、基本功能

功能一:预定的格式将程序中的数据保存在一个string 中

// 如何使用 stringstream
// 对象生成格式化的 string#include <iostream>
#include <string>
#include <sstream>
using namespace std;int main()
{cout << "\n Welcome to the StringStream Demo program.\n";// 构建一些将在string中出现的数据变量// PI 精确到小数点后15位double pi = 3.141592653589793;float dollar = 1.00;int dozen = 12;string text;// 我们希望tring 的格式如下:// dozen适12,dollar是$1.00// 精确到小数点后10为pi是3.141592653589793// 生成stringstream 对象stringstream ss;// 现在像使用cout一样使用ssss << " A dozen is "<< dozen << ", a dollar is $ ";ss.setf(ios::fixed);ss.precision(2);ss << dollar << " and \n the value of pi to 10 places is ";ss.precision(10);ss << pi << ".";// 现在将ss中的内容赋给一个string对象// 使用str()函数text = ss.str();cout << "\nHere is our formatted text string:\n" << text << endl;// 再加入一些信息ss << "\ There are 2 \"+\" in C++.";text = ss.str();cout<< "\nHere is the final string:\n" << text << endl;return 0;
}

功能二:实现类型转换

string到 int / double 的转换

#include <iostream>
#include <string>
#include <sstream>
using namespace std;int main()
{double  rb;  int     ri;     // 存储结果string  s;      // 要转化的字符串stringstream ss;s = "123.456789";ss << s;         // 类似 coutss >> rb;        // 类似 cincout.precision(10);cout << "string \""<< s << "\" to double object " << rb << endl;s = "654321";ss.clear();      //清空流ss << s;ss >> ri;cout << "string \""<< s << "\" to int object " << ri << endl;return 0;
}

功能三:实现任意类型转换

#include <iostream>
#include <string>
#include <sstream>
using namespace std;
template <class t1="" class="" t2="">int main()
{double  sb = 123.456;  int     ri;     // 存储结果stringstream ss;ss << sb;ss >> ri;cout << ri;return 0;
}

该功能没多少实际意义,不如static_cast 来的简单。

三、重要功能

写这篇文章的目的主要是解决在笔试过程中,利用stringstream解决输入的问题。

解决问题的关键是,以stringstream为输入流,然后以getline识别分隔符然后进行处理。

常见输入是一行,然后将其放入vector中。

1.数字由空格或逗号分开。

5 1 2 3 4 5

#include<bits/stdc++.h>
//如果没有这个头文件
//看这里https://blog.csdn.net/qq_41687938/article/details/116535313
using namespace std;int main() {stringstream ss;vector<int> nums;string input;getline(cin, input);ss << input;int num;while (ss >> num) {nums.push_back(num);}for (auto a : nums) {cout << a << endl;}return 0;
}

因为stringstream默认输出由空格分开

2.数字由逗号分开

5,1,2,3,4,5

#include<bits/stdc++.h>
//如果没有这个头文件
//看这里https://blog.csdn.net/qq_41687938/article/details/116535313
using namespace std;int main() {stringstream ss;vector<int> nums;string input;getline(cin, input);ss << input;string num;while (getline(ss, num, ',')) {nums.push_back(stoi(num));}for (auto a : nums) {cout << a << endl;}return 0;
}

3.数字间不止一类符号分隔

5,[1,2,3,4,5]

如果除了分隔符还有其他无关字符,就得提取出来后,自己加判断了。

#include<bits/stdc++.h>
using namespace std;int main() {//std::string input;//{'5',',','[','1',',','2',',','3',',','4',',','5',']'};//5,[1,2,3,4,5]getline(cin, input);std::stringstream ss(input);string str;int a;vector<int> nums;while (getline(ss, str, ',')) {if (!str.empty() && str[0] == '[') {a = stoi(str.substr(1));}else if (!str.empty() && str[str.size() - 1] == ']')a = stoi(str.substr(0, str.length() - 1));elsea = stoi(str);nums.push_back(a);}for (int i = 0; i < nums.size(); i++)cout << nums[i] << ' ';return 0;
}

stringstream用法总结相关推荐

  1. string和stringstream用法总结

    string和stringstream用法总结 一.string string 是 C++ 提供的字串型態,和 C 的字串相比,除了有不限长度的优点外,还有其他许多方便的功能.要使用 string, ...

  2. 2013蓝桥杯C++A:颠倒的价牌(stringstream用法)

    四.题目:颠倒的价牌 Description 小李的店里专卖其它店中下架的样品电视机,可称为:样品电视专卖店. 其标价都是4位数字(即千元不等). 小李为了标价清晰.方便,使用了预制的类似数码管的标价 ...

  3. stringstream用法

    分为istream和ostringstream. 1 std::string name("zeta");2 int age = 27;3 4 ostringstream os;5 ...

  4. string和stringstream用法

    一.string string 是 C++ 提供的字符串类型,和 C 的字串相比,除了有不限长度的优点外,还有其他许多方便的功能.要使用 string, 必须先加入这一行: #include < ...

  5. 关于stringstream的用法总结

    关于stringstream的用法总结 将整形转化成字符串 #include <iostream> #include <sstream>using namespace std; ...

  6. C++istringstream, ostringstream, stringstream的用法

    1.ostringstream:ostringstream 对象用来进行格式化的输出,可以方便的将各种类型转换为string类型.ostringstream 只支持 << 操作符. 2.i ...

  7. C++中使用stringstream与getline处理一行被空格(逗号)隔开的数据

    要求: 处理一行以空格隔开的整数,例如用数组存放一行数据:1 2 3 4 5 6 7 8 9 处理一行以逗号隔开的整数,例如用数组存放一行数据:1,2,3,4,5,6,7,8,9 下面先简单介绍str ...

  8. 【三种解法】Not so Mobile UVA - 839_19行代码AC

    立志用最少的代码做最高效的表达 Before being an ubiquous communications gadget, a mobile was just a structure made o ...

  9. 试题7 算法训练 P0505(最右边的那个非0的数字)

    题目: 一个整数n的阶乘可以写成n!,它表示从1到n这n个整数的乘积.阶乘的增长速度非常快,例如, 13!就已经比较大了,已经无法存放在一个整型变量中:而35!就更大了,它已经无法存放在一个浮点型变量 ...

最新文章

  1. UITests操作指南
  2. wince 修改dns_如何修改wince的网络配置
  3. UNP Chapter 9 - 基本名字与地址转换
  4. 数据库连接池技术详解【吐血整理,疯狂推荐】
  5. windos下安装redis
  6. 声源测向: TDOA-GCC-PATH方法
  7. 19.TCP/IP 详解卷1 --- TCP 的交互数据流
  8. mysql酒店客房管理系统的设计_酒店客房信息管理系统的设计实现(MySQL)
  9. 如何把java源码打成jar_将java源码打成jar包
  10. OA新增百亿市场,蓝凌、钉钉靠“智能OA”占稳C位
  11. java多数据库开发evn,Java,在多线程evnironments中通过散列统一划分传入的工作
  12. WH-1000XM3蓝牙连接笔记本电脑
  13. 服务器灾备解决方案--两地三中心(图文详解)
  14. u盘刻录光盘后空间缩小解决方法
  15. SendMessgae
  16. linux中的快捷键
  17. flutter flutter_swiper自定义指示器
  18. DDR4硬件原理图设计详解
  19. 去雾综述_图像去雾技术综述
  20. 事件 ID:      10016 解决方案

热门文章

  1. TensorFlow--线性回归问题初步
  2. 【2】HashMap
  3. TCP/IP详解学习笔记(7)-广播和多播,IGMP协议
  4. 在Eclipse中使用JUnit4进行单元測试(0基础篇)
  5. jqury-zoom的一个例子
  6. varchar,nvarchar不同呀。小心出错
  7. hdu 5277(最大团问题)
  8. hdu 2874(LCA + 节点间距离)
  9. java多线程------实现Runnable接口创建多进程,实现资源共享
  10. hdu-1166敌兵布阵(树状数组)