stringstream用法总结
目录
一、概念
二、基本功能
功能一:预定的格式将程序中的数据保存在一个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用法总结相关推荐
- string和stringstream用法总结
string和stringstream用法总结 一.string string 是 C++ 提供的字串型態,和 C 的字串相比,除了有不限长度的优点外,还有其他许多方便的功能.要使用 string, ...
- 2013蓝桥杯C++A:颠倒的价牌(stringstream用法)
四.题目:颠倒的价牌 Description 小李的店里专卖其它店中下架的样品电视机,可称为:样品电视专卖店. 其标价都是4位数字(即千元不等). 小李为了标价清晰.方便,使用了预制的类似数码管的标价 ...
- stringstream用法
分为istream和ostringstream. 1 std::string name("zeta");2 int age = 27;3 4 ostringstream os;5 ...
- string和stringstream用法
一.string string 是 C++ 提供的字符串类型,和 C 的字串相比,除了有不限长度的优点外,还有其他许多方便的功能.要使用 string, 必须先加入这一行: #include < ...
- 关于stringstream的用法总结
关于stringstream的用法总结 将整形转化成字符串 #include <iostream> #include <sstream>using namespace std; ...
- C++istringstream, ostringstream, stringstream的用法
1.ostringstream:ostringstream 对象用来进行格式化的输出,可以方便的将各种类型转换为string类型.ostringstream 只支持 << 操作符. 2.i ...
- C++中使用stringstream与getline处理一行被空格(逗号)隔开的数据
要求: 处理一行以空格隔开的整数,例如用数组存放一行数据:1 2 3 4 5 6 7 8 9 处理一行以逗号隔开的整数,例如用数组存放一行数据:1,2,3,4,5,6,7,8,9 下面先简单介绍str ...
- 【三种解法】Not so Mobile UVA - 839_19行代码AC
立志用最少的代码做最高效的表达 Before being an ubiquous communications gadget, a mobile was just a structure made o ...
- 试题7 算法训练 P0505(最右边的那个非0的数字)
题目: 一个整数n的阶乘可以写成n!,它表示从1到n这n个整数的乘积.阶乘的增长速度非常快,例如, 13!就已经比较大了,已经无法存放在一个整型变量中:而35!就更大了,它已经无法存放在一个浮点型变量 ...
最新文章
- UITests操作指南
- wince 修改dns_如何修改wince的网络配置
- UNP Chapter 9 - 基本名字与地址转换
- 数据库连接池技术详解【吐血整理,疯狂推荐】
- windos下安装redis
- 声源测向: TDOA-GCC-PATH方法
- 19.TCP/IP 详解卷1 --- TCP 的交互数据流
- mysql酒店客房管理系统的设计_酒店客房信息管理系统的设计实现(MySQL)
- 如何把java源码打成jar_将java源码打成jar包
- OA新增百亿市场,蓝凌、钉钉靠“智能OA”占稳C位
- java多数据库开发evn,Java,在多线程evnironments中通过散列统一划分传入的工作
- WH-1000XM3蓝牙连接笔记本电脑
- 服务器灾备解决方案--两地三中心(图文详解)
- u盘刻录光盘后空间缩小解决方法
- SendMessgae
- linux中的快捷键
- flutter flutter_swiper自定义指示器
- DDR4硬件原理图设计详解
- 去雾综述_图像去雾技术综述
- 事件 ID: 10016 解决方案