c++ stringstream ss()[通俗易懂]

c++ stringstream ss()[通俗易懂]定义了三个类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作。本文以stringstream为主,介绍流的输入和输出操作。主要用来进行数据类型转换,由于使用string对象来代替字符数组(snprintf方式),就避免缓冲区溢出的危险;而且,因为传入参数和目标对象的类型会被自动推导出来,所以不存在错误的格式化符的问题。简单说,相比c库的数据类型转换而言,更加安全、自动和直接。一、从string对象str中读.

大家好,又见面了,我是你们的朋友全栈君。

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

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

// swapping ostringstream objects
#include <string> // std::string
#include <iostream> // std::cout
#include <sstream> // std::stringstream

int main () { 
   

  std::stringstream ss;

  ss << 100 << ' ' << 200;

  int foo,bar;
  ss >> foo >> bar;

  std::cout << "foo: " << foo << '\n';
  std::cout << "bar: " << bar << '\n';

  return 0;
}
 Edit & Run

Output:
foo: 100
bar: 200

一、从string对象str中读取字符。遇空格结束

下面代码增加while循环,能将str全部单词打印出来

#include <iostream>
#include <sstream>

using namespace std;

int main()
{ 
   
	string str = "hello world";
	cout << str << endl;
	
	stringstream ss(str); //将str复制到ss
	string abc;
	while(ss >> abc) //相当于输入一个个的单词
	{ 
   
		cout << abc <<endl;
	}

	return 0;
}

OUTPUT:
在这里插入图片描述
二、支持C风格的串流的输入输出操作

#include <iostream>
#include <sstream>

using namespace std;

int main()
{ 
   
	int num = 1000;
	string str;
	stringstream ss; //将str复制到ss
	ss << num;
	ss >> str;
	ss.clear();//使用stringstream来做转换时,最好使用完,进行ss.clear()操作
	cout << str << endl;
	cout << str.c_str() << endl;
	return 0;
}

OUTPUT:
在这里插入图片描述

三、字符的拼接
在这里插入图片描述

本文作者:WeSiGJ

参考链接(包括但不限于):
https://blog.csdn.net/liitdar/article/details/82598039
https://blog.csdn.net/weierqiuba/article/details/66473060
https://blog.csdn.net/xw20084898/article/details/21939811
http://www.cplusplus.com/reference/sstream/stringstream/stringstream/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143033.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python 列表元素字符串转浮点

    Python 列表元素字符串转浮点在网络爬虫或者读取文件中的数据时,很多时候读取出来的数值是字符串形式的,这些字符串形式的数据并不能用来作计算或者更深入的操作,因此我们需要把他们转换为数值的形式。简单粗暴的for循环假设,这里有一个以字符串形式存储数值的列表,具体如下:a=[‘2′,’3.5′,’10’,’88’,’32.66′]我们需要将其转换为浮点的形式,最简单粗暴直接的方法,可以使用…

    2022年6月1日
    47
  • 华为的面试经历

    华为的面试经历

    2021年12月1日
    51
  • C++面向对象程序设计_面向对象程序设计的基本机制是

    C++面向对象程序设计_面向对象程序设计的基本机制是一、面向过程和面向对象的区别。面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为二、面向过程和面向对象的特征。面向过程是把过程作为编程的思路,如程序流程图,但是面向对象是把实体当作对象,如自行车是一个实体,就…

    2022年8月18日
    5
  • JS跳转代码_javascript跳转代码

    JS跳转代码_javascript跳转代码<scriptlanguage=”javascript”type=”text/javascript”>functionrequest(paras){varurl=location.href;varparaString=url.substring(url.indexOf(“?”)+1,url.length).split(“&”);varparaObj={}for(i=0;j=paraString[i];i++){paraObj[j.substrin

    2022年8月13日
    9
  • 堆和栈的差别(转过无数次的文章)

    堆和栈的差别(转过无数次的文章)

    2021年12月9日
    49
  • mybatis中的动态sql表现为_MybatisPlus

    mybatis中的动态sql表现为_MybatisPlus如何分页查询Mybatis如何分页查询?Mysql中可以使用limit语句,但limit并不是标准SQL中的,如果是其它的数据库,则需要使用其它语句。MyBatis提供了RowBounds类,用于实现分页查询。RowBounds中有两个数字,offset和limit。MyBatis如何利用RowBounds

    2022年9月22日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号