本文主要介绍 C++ 中 stringstream 类的常见用法。

1 概述

<sstream> 定义了三个类:istringstream、ostringstream 和 stringstream,分别用来进行流的输入、输出和输入输出操作。本文以 stringstream 为主,介绍流的输入和输出操作。

<sstream> 主要用来进行数据类型转换,由于 <sstream> 使用 string 对象来代替字符数组(snprintf方式),就避免缓冲区溢出的危险;而且,因为传入参数和目标对象的类型会被自动推导出来,所以不存在错误的格式化符的问题。简单说,相比c库的数据类型转换而言,<sstream> 更加安全、自动和直接。

2 代码示例

2.1 数据类型转换

这里展示一个代码示例,该示例介绍了将 int 类型转换为 string 类型的过程。示例代码(stringstream_test1.cpp)如下:

  1. #include <string>

  2. #include <sstream>

  3. #include <iostream>

  4. #include <stdio.h>

  5. using namespace std;

  6. int main()

  7. {

  8. stringstream sstream;

  9. string strResult;

  10. int nValue = 1000;

  11. // 将int类型的值放入输入流中

  12. sstream << nValue;

  13. // 从sstream中抽取前面插入的int类型的值,赋给string类型

  14. sstream >> strResult;

  15. cout << "[cout]strResult is: " << strResult << endl;

  16. printf("[printf]strResult is: %s\n", strResult.c_str());

  17. return 0;

  18. }

编译并执行上述代码,结果如下:

2.2 多个字符串拼接

本示例介绍在 stringstream 中存放多个字符串,实现多个字符串拼接的目的(其实完全可以使用 string 类实现),同时,介绍 stringstream 的清空方法。

示例代码(stringstream_test2.cpp)如下:

  1. #include <string>

  2. #include <sstream>

  3. #include <iostream>

  4. using namespace std;

  5. int main()

  6. {

  7. stringstream sstream;

  8. // 将多个字符串放入 sstream 中

  9. sstream << "first" << " " << "string,";

  10. sstream << " second string";

  11. cout << "strResult is: " << sstream.str() << endl;

  12. // 清空 sstream

  13. sstream.str("");

  14. sstream << "third string";

  15. cout << "After clear, strResult is: " << sstream.str() << endl;

  16. return 0;

  17. }

编译并执行上述代码,结果如下:

从上述代码执行结果能够知道:

  • 可以使用 str() 方法,将 stringstream 类型转换为 string 类型;
  • 可以将多个字符串放入 stringstream 中,实现字符串的拼接目的;
  • 如果想清空 stringstream,必须使用 sstream.str(""); 方式;clear() 方法适用于进行多次数据类型转换的场景。详见示例2.3。

2.3 stringstream的清空

清空 stringstream 有两种方法:clear() 方法以及 str("") 方法,这两种方法有不同的使用场景。str("") 方法的使用场景,在上面的示例中已经介绍了,这里介绍 clear() 方法的使用场景。示例代码(stringstream_test3.cpp)如下:

  1. #include <sstream>

  2. #include <iostream>

  3. using namespace std;

  4. int main()

  5. {

  6. stringstream sstream;

  7. int first, second;

  8. // 插入字符串

  9. sstream << "456";

  10. // 转换为int类型

  11. sstream >> first;

  12. cout << first << endl;

  13. // 在进行多次类型转换前,必须先运行clear()

  14. sstream.clear();

  15. // 插入bool值

  16. sstream << true;

  17. // 转换为int类型

  18. sstream >> second;

  19. cout << second << endl;

  20. return 0;

  21. }

编译并执行上述代码,结果如下:

注意:在本示例涉及的场景下(多次数据类型转换),必须使用 clear() 方法清空 stringstream,不使用 clear() 方法或使用 str("") 方法,都不能得到数据类型转换的正确结果。下图分别是未使用 clear() 方法、使用 str("") 方法时的运行结果:

stringstream常见用法介绍相关推荐

  1. 怎么用计算机打出cpdd,网络语cpdd是什么梗啥意思 cpdd出处来源哪里常见用法介绍...

    原标题:网络语cpdd是什么梗啥意思 cpdd出处来源哪里常见用法介绍 [海峡网] 随着网络的快速发展,抖音和微博这样的软件也是越来越火,因此很多流行语就随之诞生,特别是在抖音里,经常看到游戏相关的用 ...

  2. c++中stringstream常见用法

    c++中stringstream常见用法 stringstream使用时,要包含头文件#include<sstream>,sstream这个库的又是在于存入类型的数据可以直接进行转换,不用 ...

  3. 正则表达式及常见用法介绍

    strObj.search(正则) 返回 下标/-1 strObj.match(正则) 返回 数组/null 正则的方法: re.test(字符) 返回 true/false 特点:只要有一个匹配就为 ...

  4. 【转】stringstream(sstream)常用用法介绍

    [转]stringstream(sstream)常用用法介绍 转载自这篇博客 本文主要介绍 C++ 中 stringstream 类的常见用法. 1 概述 <sstream> 定义了三个类 ...

  5. stringstream的常见用法

    stringstream的常见用法 前言 今天笔试实习,做到一道字符串的题,感觉自己对字符串掌握的不够,今天记录记录stringstream的学习 一.简介 头文件是 #include<sstr ...

  6. Scanpy(一)AnnData数据结构与一些API用法介绍

    目录 Scanpy简介与安装 AnnData AnnData的结构 h5ad:AnnData的写入和读取 Scanpy中一些常用api的用法介绍 sc.pp.filter_cells sc.pp.fi ...

  7. 框架前期准备篇之AutoFac常见用法总结 转载

    框架前期准备篇之AutoFac常见用法总结 一. 说在前面的话 凡是大约工作在两年以上的朋友们,或多或少都会接触到一些框架搭建方面的知识,只要一谈到框架搭建这个问题或者最佳用法这个问题,势必会引起一点 ...

  8. 第二节:框架前期准备篇之AutoFac常见用法总结

    一. 说在前面的话 凡是大约工作在两年以上的朋友们,或多或少都会接触到一些框架搭建方面的知识,只要一谈到框架搭建这个问题或者最佳用法这个问题,势必会引起一点点小小的风波,我说我的好,他说他的好,非常容 ...

  9. python propresql mysql_python数据库操作mysql:pymysql、sqlalchemy常见用法详解

    本文实例讲述了python数据库操作mysql:pymysql.sqlalchemy常见用法.分享给大家供大家参考,具体如下: 相关内容: 使用pymysql直接操作mysql 创建表 查看表 修改表 ...

最新文章

  1. 解决微信H5获取SDK授权报错提示errMsg: “config:fail,Error: 系统错误,错误码:63002,invalid signature [20200908 22:17:17][]“
  2. 语言转4字节数据整型_R语言与RGui平台_数据类型_向量_4
  3. RIS实现系统的远程安装之三使用远程安装
  4. 微软宣布将于08年发布Centro服务器软件
  5. web前端技术分享:多行文本溢出问题解决方案
  6. 广州科目三考试 不得不看的十条提醒(图)
  7. ZZULIOJ 1128: 课程平均分
  8. linux运维故障报告,iis7报为应用程序池“xx”提供服务的进程在启动过程中尝试读取配置时报告故障(503错误)处理方法...
  9. laravel 扩展包
  10. c语言如何框出视频或图像中的车辆,视频图像中的车辆检测跟踪和分类
  11. QT编程入门系列文章之六——API 文档的使用
  12. Android编程入门很简单pdf
  13. javaweb项目页面崩溃报错
  14. Android吃鸡 3dtouch,绝地求生刺激战场3Dtouch怎么用 3Dtouch安卓手机可以用吗
  15. 2022最新常用API接口
  16. OSAL 之功耗管理
  17. WEB测试应该注意哪些地方,怎样才能做好WEB测试
  18. Oracle锁表解决方法的详细记录详解
  19. 小程序:Thu May 05 2022 11:03:00 GMT+0800 (中国标准时间) 渲染层错误
  20. 微信小程序|使用小程序制作一个马赛克处理工具

热门文章

  1. poj 2965 The Pilots Brothers#39; refrigerator
  2. sql: table,view,function, procedure created MS_Description in sql server
  3. java扩展数组_Java数组扩展
  4. 银行卡号,指定字符长度分割字符串
  5. Makefile系列之五 :函数
  6. siamese改进_[CVPR2019]我对Siamese网络的一点思考(SiamMask)
  7. java 索引实现,Java创建ES索引实现
  8. flash制作文字笔顺_flash动画课件制作有什么优点
  9. mysql清理死链接_对MySQL的死连接Sleep的进程的来源研究
  10. navicat for mysql 数据传输_如何利用Navicat for MySQL数据库进行数据传输