继续填坑٩(•̤̀ᵕ•̤́๑),这次是 stringstream的内容,最初是看到它可以把字符串直接输出成int类型,惊了,但是一直不是很懂。在网上查了很多资料,才终于差不多理解。stringstream 是C++提供的一个字符串流,和 cincout 输入输出流类似,只不过它不是从从键盘或文件输入,也不是输出到屏幕或文件中,而是接受一个对象的输入,或把缓存区的内容输出到一个对象中。具体可以用在类型转换和字符分割中。

基本方法(操作)

clear()-用来清空流标志(输入,输出标志)
str()-获得当前流中的内容
str("content")-设置流的内容(或清空流的内容)
operator <<-添加内容到stringstream对象
operator >>-从stringstream流缓存区中输出内容

应用

类型转换

int a;
string s;
stringstream ss;
//int型转换为字符串类型
ss << a; //将a输入流中(输入模式)
ss >> s; //将流中的数值输出到字符串s中(输出模式) //字符串类型转换为int型
ss << s; //将字符串输入到流中
ss >> a; //将流中的字符串输出到int型变量a中 //注意:如果做多次数据转换须调用clear()和str("")来清空输入输出标志和内容
int a = 0, b = 0;
stringstream ss;
ss << "123";
ss >> a;
ss.clear();
ss.str("");
ss << "456";
ss >> b;
cout << "a:" << a << endl;
cout << "b:" << b << endl;
cout << "ss:" << ss.str() << endl; //运行结果,不加clear()和str("");
a:123
b:0
ss:123
//原因:不加clear()和str(""),流处于输出模式无法接收新内容"456"且未被清空,所以ss仍为"123",又由于缓存区的内容已输出到a中,所以b中无内容。 //运行结果,加clear()但不加str("");
a:123
b:456
ss:123456
//原因:加入clear()清空模式,可以接收新内容"456",所以ss:123456。缓存区依次缓存"123","456"并分别输出到a, b,所以a:123, b:456 //运行结果,加clear()和str("");
a:123
b:456
ss:456
//原因:clear()清空模式,str("")清空ss对象的内容。

支持char*的输入和输出

char ch[20];
stringstream ss;
ss << 2333;
ss >> ch; //直接将数输出到ch字符数组中

字符分割

stringstream ss("hello hi hey");
string word;
while(ss >> word){
cout << word << endl;
} //运行结果
hello
hi
hey

三种给stringstream对象赋初值的方式

stringstream ss("123"); //创建的时候赋初值
ss.str("123"); //str()函数赋值
ss << "123"; //操作符"<<"添加内容(需注意当前模式)

将C++中的stringstream转换为char类型可以通过以下步骤实现:

  1. 将stringstream中的字符串读入一个string类型的变量中。
  2. 将string类型的变量转换为const char*类型的指针。
  3. 将const char*类型的指针拷贝到char类型的数组中。
#include <iostream>
#include <sstream>
#include <string.h> int main() {
std::stringstream ss;
ss << "This is a test"; std::string str;
ss >> str; const char* cstr = str.c_str(); char char_array[strlen(cstr)];
strcpy(char_array, cstr); std::cout << char_array << std::endl; return 0;
}

【C++库函数】stringstream-类型转换&&字符分割的更多相关文章

  1. EasyPR--开发详解(7)字符分割

    大家好,好久不见了. 一转眼距离上一篇博客已经是4个月前的事了.要问博主这段时间去干了什么,我只能说:我去“外面看了看”. 图1 我想去看看 在外面跟几家创业公司谈了谈,交流了一些大数据与机器视觉相关 ...

  2. CDH5.4.5运行多字符分割记录

    准备工作: 测试文件内容:cis_cust_imp_info 20131131|+|100010001001|+|BR01|+|2000.0120131131|+|100010001002|+|BR0 ...

  3. Python中通过多个字符分割(split)字符串的方法

    python中字符串自带的split方法一次只能使用一个字符对字符串进行分割,但是python的正则模块则可以实现多个字符分割 import re re.split('-|_','sharejs_ha ...

  4. 车牌识别LPR(六)-- 字符分割

    第六篇:字符分割 在知道了车牌字符的规律之后,可以根据车牌的特点对字符进行分割.一般最容易想到的方法就是根据车牌投影.像素统计特征对车牌图像进行字符分割的方法.是一种最常用的.最基本的.最简单的车牌字 ...

  5. SOM聚类与Voroni图在验证码字符分割中的应用

    http://www.docin.com/p-1300981517.html SOM聚类与Voroni图在验证码字符分割中的应用  

  6. EasyPR源码剖析(8):字符分割

    通过前面的学习,我们已经可以从图像中定位出车牌区域,并且通过SVM模型删除“虚假”车牌,下面我们需要对车牌检测步骤中获取到的车牌图像,进行光学字符识别(OCR),在进行光学字符识别之前,需要对车牌图块 ...

  7. opencv 车牌字符分割 ANN网络识别字符

    最近在复习OPENCV的知识,学习caffe的深度神经网络,正好想起以前做过的车牌识别项目,可以拿出来研究下 以前的环境是VS2013和OpenCV2.4.9,感觉OpenCV2.4.9是个经典版本啊 ...

  8. Python中通过多个字符分割(split)字符串的方法--转载

    Python中字符串自带的split方法一次只能使用一个字符对字符串进行分割,但是python的正则模块则可以实现多个字符分割 import re re.split('_#|','this_is#a| ...

  9. C# 如何用多字符分割字符串

    用单字符分割字符串大家应该很熟悉,例如: string source = "dfd^Afdf^AAAAAA^Adfdf"; var list= source.Split('A'); ...

  10. php把字符串指定字符分割成数组

    <?php $str="1|2|3|4|5|"; $var=explode("|",$str); print_r($var); ?> $var=ex ...

随机推荐

  1. Windows Terminal 简单美化

    需要用到的软件/插件 oh-my-posh posh-git PSReadLine 安装 oh-my-posh oh-my-posh 是 shell 主题引擎,使用 winget 来安装 oh-my- ...

  2. 在CPF里使用OpenGL做跨平台桌面应用开发

    CPF 是开源的C#跨平台UI框架,支持使用OpenGL来渲染,可以用来硬件加速播放视频或者显示3D模型 实现原理其实就是Skia用OpenGL后端,Skia里绑定GLView的OpenGL纹理,将纹 ...

  3. AtCoder_abc328

    A - Not Too Hard 题目链接 题目大意 给出\(N\)个数(\(S_1\) \(S_2\)...\(S_n\))和一个\(X\),输出所有小于等于\(X\)的\(S_i\)之和 解题思路 ...

  4. 09 - Shell流程控制语句

    1. if-else语句 能够使用if条件语句进行条件判断 1.1 if 语法 if 条件 then 命令 fi if 条件; then 命令; fi 1.2 if-else 语法 if 条件 the ...

  5. [ABC279G] At Most 2 Colors

    Problem Statement There is a grid with $1 \times N$ squares, numbered $1,2,\dots,N$ from left to rig ...

  6. 2023振兴杯-Crypto wp

    crypto1 题目 from flag import flag def encrypt(x, y): key='zxb' result='' for i in range(len(x)): resu ...

  7. Linux查看内存使用情况以及释放内存

    查看内存使用情况 一般使用 top 命令即可,命令行输入 top会实时显示内存和cpu等硬件的使用情况,然后输入M即显示内存的使用情况. 但是有些情况下,内存明明被占用了,但是使用top命令依然无法找 ...

  8. 华企盾DSC无缝替换亿赛通案例

    第一种方法无缝替换亿赛通案例 1. 把DSCClient.exe和DSCService.exe添加到亿赛通的加密控制策略中,关联类型设置为*.*|,配置为落地自动解密,包括其它程序也配置成落地自动解密 ...

  9. 为什么要实践 A+ES & CQRS ?

    Wow : 基于 DDD & EventSourcing 的现代响应式 CQRS 架构微服务开发框架 中文文档 领域驱动 | 事件驱动 | 测试驱动 | 声明式设计 | 响应式编程 | 命令查 ...

  10. 微软成为PostgreSQL主要贡献者

    微软成为PostgreSQL主要贡献者 微软对PostgreSQL贡献的很多新功能都来自于客户在使用微软Azure上的PostgreSQL管理实例数据库,所以这些新功能都来自于真实的客户需求 微软对P ...