stringstream常见用法介绍(程序均验证通过)

参考原文地址:https://blog.csdn.net/liitdar/article/details/82598039
本文主要介绍 C++ 中 stringstream 类的常见用法。

1 概述

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

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

2 代码示例

2.1 数据类型转换

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

#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main() {
       stringstream sstream;
       string strResult;
       int nValue = 1000;
       sstream << nValue;//将int类型的值放入输入流中
       sstream >> strResult;//从sstream中抽取前面插入的int类型的值赋值给string类的strResult
       cout << "strResult is " << strResult <<endl;
       cout << strResult.c_str();
       return 0;
    }

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

  /home/yhj/测试程序/数据结构与算法/stringstream_l/cmake-build-debug/stringstream_l
    strResult is 1000
    1000
    Process finished with exit code 0

2.2 多个字符串拼接

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

示例代码如下:

 #include <iostream>
 #include <sstream>
 #include <string>
 using namespace std;
 int main() {
       stringstream sstream;
       sstream << "first" << " " << "string,";//将多个字符串放入sstream中
       sstream << "second string";
       cout << "strResult is:" << sstream.str() << endl;
       sstream.str("");//清空sstream
       sstream << "third string";
       cout << "After clear,strResult is: " << sstream.str() <<endl;
       return 0;
    }

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

/home/yhj/测试程序/数据结构与算法/stringstream_l/cmake-build-debug/stringstream_l
strResult is:first string,second string
After clear,strResult is: third string

Process finished with exit code 0

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

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

2.3 stringstream的清空

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

#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main() {
  stringstream sstream;
  int first,second;
  sstream << "456";//插入字符串
  sstream >> first;//转化为int类型
  cout << first <<endl;
  sstream.clear();//在进行多次类型转换前先进行清空clear()
  sstream << true;
  sstream >> second;
  cout << second << endl;
  return 0;
}

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

/home/yhj/测试程序/数据结构与算法/stringstream_l/cmake-build-debug/stringstream_l
456
1

Process finished with exit code 0

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


istringstream:执行c++风格的串流的输入操作。可以绑定一行字符串,然后以空格为分隔符将该行分隔开来。

#include<iostream>
#include<sstream>
using namespace std;
int main()
{
	string str, line;
	while(getline(cin, line))
	{
		istringstream stream(line);
		while(stream>>str)
			cout<<str.c_str()<<endl;
	}	
	return 0;
}

测试:
输入:i am a boy
输出:
i
am
a
boy

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值