【STL21】C++中的stringstream(字符串流)

原创作者:郑同学的笔记
原创地址:https://zhengjunxue.blog.csdn.net/article/details/134698698
qq技术交流群:921273910

当涉及到字符串的处理和操作时,C++中的stringstream(字符串流)是一个非常有用的工具。它允许我们将字符串的输入和输出与标准输入输出流类似地进行操作。本教程将向你介绍stringstream的基本概念、用法和示例。

在这里插入图片描述

一、头文件包含

首先,你需要在代码中包含 头文件,以便使用stringstream类。

#include <sstream>

二.、基本用法

stringstream类是通过将字符串与流对象相关联来工作的。它可以将字符串内容读取到流对象中,也可以将流对象的内容转换为字符串。

2.1、创建对象

创建一个 stringstream 对象,可以使用默认构造函数。

std::stringstream ss;

2.2、写入数据

使用流操作符 << 将不同类型的数据写入 stringstream 中。可以连续写入多个数据。

int num = 42;
std::string str = "Hello, World!";
float pi = 3.14159;

ss << "The number is: " << num << "\n";
ss << "The string is: " << str << "\n";
ss << "The value of pi is: " << pi << "\n";

2.3、获取字符串

使用 str() 成员函数可以获取拼接后的字符串。

std::string result = ss.str();

2.4 字符串到流对象

要将字符串放入stringstream对象中,可以使用<<运算符。以下示例将字符串"Hello, World!"放入stringstream对象中:

std::stringstream ss;
std::string str = "Hello, World!";
ss << str;

现在,字符串"Hello, World!"已经被放入了stringstream对象ss中。

2.5、流对象到字符串

要从stringstream对象中提取内容并将其转换为字符串,可以使用>>运算符。以下示例从stringstream对象中提取内容并将其存储在字符串变量中:

std::stringstream ss;
std::string str;
ss >> str;

现在,stringstream对象ss中的内容已被提取并存储在字符串变量str中。

2.6、流对象合并字符串和数字

有时,我们需要使用字符串和数字的拼接,这时便可以使用流对象。

你可以使用 C++ 的字符串流 stringstream 将 {code:errCode} 拼接成一个完整的 JSON 字符串,其中的 errCode 为具体的值。以下是一个示例代码:

#include <iostream>
#include <sstream>

int main() {
    // 假设 errCode 的值为 0
    int errCode = 0;

    // 创建字符串流
    std::stringstream ss;

    // 向字符串流中输出 JSON 数据
    ss << "{ \"code\": " << errCode << " }";

    // 获取拼接后的字符串
    std::string json_str = ss.str();

    // 输出结果
    std::cout << json_str << std::endl;

    return 0;
}

在这个示例中,我们首先定义了一个整型变量 errCode,并将其赋值为 0。接下来,我们创建了一个字符串流 ss,并使用流运算符 << 向其中输出 JSON 数据。最后,我们使用 ss.str() 函数获取拼接后的字符串,并输出结果。

三、示例

下面是一个完整的示例,演示如何使用stringstream从字符串中提取整数并进行计算:

#include <iostream>
#include <sstream>
#include <string>

int main() {
    std::string numbers = "10 20 30 40 50";
    std::stringstream ss(numbers);
    std::string token;
    int sum = 0;

    while (getline(ss, token, ' ')) {
        int number;
        std::stringstream(token) >> number;
        sum += number;
    }

    std::cout << "Sum: " << sum << std::endl;

    return 0;
}

在上述示例中,我们首先定义了一个包含一系列数字的字符串numbers。然后,我们将其放入一个stringstream对象ss中。

接下来,我们使用getline()函数以空格作为分隔符从stringstream中逐行获取数字。获取到的每个数字都存储在字符串变量token中。

在每次循环迭代中,我们使用另一个stringstream对象将字符串token转换为整数,并将其加到变量sum中。

最后,我们打印出计算得到的总和。

四、总结

stringstream是C++中非常有用的工具,可以方便地处理字符串的输入和输出。通过将字符串与流对象相关联,我们可以轻松地将字符串数据转换为其他类型(如整数或浮点数),或者将其他类型的数据转换为字符串。

参考
1、C++ STL 容器库 中文文档
2、STL教程:C++ STL快速入门
3、https://www.apiref.com/cpp-zh/cpp/header.html
4、https://en.cppreference.com/w/cpp/header
5、WIKI教程_C ++标准库_C++ Library - <algorithm>

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郑同学的笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值