C++ stringstream类用法详解

 更新时间:2021年08月13日 15:07:26   作者:liitdar  
这篇文章主要介绍了C++ stringstream类用法详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

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

1 概述

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

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

2 代码示例

2.1 数据类型转换

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

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

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

2.2 多个字符串拼接

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

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

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

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

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

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

2.3 stringstream的清空

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

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

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

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

到此这篇关于C++ stringstream类用法详解的文章就介绍到这了,更多相关C++ stringstream类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用C++递归求解跳台阶问题

    使用C++递归求解跳台阶问题

    这篇文章主要介绍了使用C++求解跳台阶问题的方法,通过递归算法来解决,不算难,文中给出了计算思路,需要的朋友可以参考下
    2016-02-02
  • 关于C++内部类的介绍与使用示例

    关于C++内部类的介绍与使用示例

    今天小编就为大家分享一篇关于关于C++内部类的介绍与使用示例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • C语言联合体Union特点及运用全面讲解教程

    C语言联合体Union特点及运用全面讲解教程

    这篇文章主要为大家介绍了C语言联合体Union特点及运用的全面讲解教程有需要深度朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2021-10-10
  • linux下基于C语言的信号编程实例

    linux下基于C语言的信号编程实例

    这篇文章主要介绍了linux下基于C语言的信号编程,实例分析了信号量的基本使用技巧与相关概念,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • C语言进阶:指针的进阶(1)

    C语言进阶:指针的进阶(1)

    这篇文章主要介绍了C语言指针详解及用法示例,介绍了其相关概念,然后分享了几种用法,具有一定参考价值。需要的朋友可以了解下
    2021-09-09
  • C++实现LeetCode(157.用Read4来读取N个字符)

    C++实现LeetCode(157.用Read4来读取N个字符)

    这篇文章主要介绍了C++实现LeetCode(157.用Read4来读取N个字符),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C语言对堆排序一个算法思路和实现代码

    C语言对堆排序一个算法思路和实现代码

    这篇文章主要介绍了C语言对堆排序一个算法思路和实现代码,堆排序是一种树形选择排序,是对直接选择排序的有效改进,需要的朋友可以参考下
    2014-06-06
  • C++ 类的静态成员深入解析

    C++ 类的静态成员深入解析

    在C++中类的静态成员变量和静态成员函数是个容易出错的地方,本文先通过几个例子来总结静态成员变量和成员函数使用规则,再给出一个实例来加深印象
    2013-09-09
  • vscode使用官方C/C++插件无法进行代码格式化问题

    vscode使用官方C/C++插件无法进行代码格式化问题

    这篇文章主要介绍了vscode使用官方C/C++插件无法进行代码格式化问题,本文通过截图实例代码相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • C语言用fstat函数获取文件的大小方法

    C语言用fstat函数获取文件的大小方法

    今天小编就为大家分享一篇关于C语言用fstat函数获取文件的大小方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12

最新评论