C++编程语言中stringstream类介绍

C++编程语言中stringstream类介绍本文主要介绍C++编程语言中stringstream类的相关知识,同时通过示例代码介绍stringstream类的使用方法。1概述<sstream>定义了三个类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作。本文以stringstream为主,介绍流的输入和输出操作。<sstream>主要用来进行数据类型转换,由于<sstream>使用string对

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

本文主要介绍 C++ 编程语言中 stringstream 类的相关知识,同时通过示例代码介绍 stringstream 类的使用方法。

1 概述

<sstream> 定义了三个istringstreamostringstream 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;
}

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

C++编程语言中stringstream类介绍

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;
}

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

C++编程语言中stringstream类介绍

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

  • 可以使用 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;
}

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

C++编程语言中stringstream类介绍

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

C++编程语言中stringstream类介绍

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/130208.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • linux 解压rar密码,linux下rar包的压缩与解压方案

    linux 解压rar密码,linux下rar包的压缩与解压方案方法一:yuminstallunrar方法二:下载地址:以最新的为准。对于Window下的常见压缩文件.zip和.rar,Linux也有相应的方法来解压它们:1:对于.ziplinux下提供了zip和unzip程序,zip是压缩程序,unzip是解压程序。它们的参数选项很多,这里只做简单介绍,举例说明一下其用法:#zipall.zip*.jpg(这条命令是将所有.jpg的文件压缩成一个z…

  • github邮箱验证不了_为什么github注册不成功

    github邮箱验证不了_为什么github注册不成功要使用github必须先注册个github账号,注册之后会有一个邮箱验证的步骤需要做但是如果你使用126,163或者其它的一些免费邮箱,极有可能是收不到邮箱的,这个就麻烦了不过,qq邮箱目前是可以使用的,         不过也可能出现收不到的情况,那就换个qq邮箱再试,         如果还不行,换个时间段再试;   

  • 如何做职业规划并进行求职准备(持续更新)「建议收藏」

    如何做职业规划并进行求职准备(持续更新)「建议收藏」读《这些道理没有人告诉过你》的职业规划思考1.根据初步判断,我最适合的职位应该是软件测试工程师2.根据初步判断,我最适合的行业应该是软件测试行业?互联网行业?互联网金融行业?电商行业?(不太清楚行业的分类,暂时先这么写吧)3.根据职位与行业,我选定的目标公司应该是:最高目标公司三家:阿里巴巴集团、天猫、京东(亚马逊、沃尔玛百货公司、苏宁云商集团股份有…

    2022年10月20日
  • HTML网页设计制作大作业(div+css)[通俗易懂]

    HTML网页设计制作大作业(div+css)[通俗易懂]话不多说,直接上效果图:历史介绍行政区划:地理环境著名景点:美食小吃工艺品联系我们部分项目结构老师要求的十几个页面20几张图片以及一些跳转,使用div+css布局也基本上都有了。然后代码也有注释。也能够容易看得懂部分代码偷个懒,就用notepad打开。不用H-build打开了。哈哈哈另外有同学要是需要源码的话可以联系我呀。大家加油!奥利给!……………

  • java 常量池和运行时常量池_常量池中的字符串是对象吗

    java 常量池和运行时常量池_常量池中的字符串是对象吗简介:这几天在看Java虚拟机方面的知识时,看到了有几种不同常量池的说法,然后我就去CSDN、博客园等上找资料,里面说的内容真是百花齐放,各自争艳,因此,我好好整理了一下,将我自认为对的理解写下来与大家共同探讨:在Java的内存分配中,总共3种常量池:1.字符串常量池(StringConstantPool):1.1:字符串常量池在Java内存区域的哪个位置?在JDK6.0及之前版本,字符串

  • docker镜像文件导出_docker导入导出镜像

    docker镜像文件导出_docker导入导出镜像导语:需要迁移docker目录,以防万一备份一下镜像。方法1:dockerimages|awk'{print$1″:”$2}’#效果等同于dockerimages–format'{{.Repository}}:{{.Tag}}’逐个导出foriin`dockerimages–format'{{.Repository}}:{{.Tag}}’`;dodockersave$i>/mnt/images/`echo$i|sed’s/:/-

发表回复

您的电子邮箱地址不会被公开。

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