首页 > 编程语言 >深入解析 C++ 中的 ostringstream、istringstream 和 stringstream 用法

深入解析 C++ 中的 ostringstream、istringstream 和 stringstream 用法

时间:2023-07-18 17:25:39浏览次数:48  
标签:std istringstream ostringstream C++ stringstream 字符串

引言:
在 C++ 中,ostringstream、istringstream 和 stringstream 是三个非常有用的字符串流类,它们允许我们以流的方式处理字符串数据。本文将深入探讨这三个类的用法和特性,帮助读者更好地理解和应用字符串流操作。

1. ostringstream(输出字符串流)

ostringstream 是 C++ 中用于输出字符串的流类。它继承自 ostream,可以将各种数据类型输出到一个字符串中,方便地构造字符串。

使用方法:

#include <sstream>
#include <iostream>

int main() {
    std::ostringstream oss;
    int num = 42;
    double pi = 3.14159;

    // 向 ostringstream 中输出数据
    oss << "The answer is: " << num << ", and the value of pi is: " << pi;

    // 获取 ostringstream 的内容(字符串)
    std::string result = oss.str();

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

    return 0;
}

输出结果:

The answer is: 42, and the value of pi is: 3.14159

2. istringstream(输入字符串流)

istringstream 是 C++ 中用于输入字符串的流类。它继承自 istream,可以将一个字符串解析成各种数据类型,方便地从字符串中读取数据。

使用方法:

#include <sstream>
#include <iostream>

int main() {
    std::string data = "John 25 3.14";
    std::istringstream iss(data);

    std::string name;
    int age;
    double pi;

    // 从 istringstream 中读取数据
    iss >> name >> age >> pi;

    // 输出结果
    std::cout << "Name: " << name << std::endl;
    std::cout << "Age: " << age << std::endl;
    std::cout << "Value of pi: " << pi << std::endl;

    return 0;
}

输出结果:

Name: John
Age: 25
Value of pi: 3.14

3. stringstream(输入输出字符串流)

stringstream 是 C++ 中同时支持输入和输出的字符串流类。它继承自 iostream,可以将各种数据类型输出到一个字符串中,也可以从一个字符串中读取数据。

使用方法:

#include <sstream>
#include <iostream>

int main() {
    std::stringstream ss;
    int num = 42;
    double pi = 3.14159;

    // 向 stringstream 中输出数据
    ss << "The answer is: " << num << ", and the value of pi is: " << pi;

    // 获取 stringstream 的内容(字符串)
    std::string result = ss.str();

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

    // 清空 stringstream
    ss.str("");
    ss.clear();

    // 从一个字符串中读取数据
    std::string data = "John 25 3.14";
    ss << data;

    std::string name;
    int age;
    double value;

    // 从 stringstream 中读取数据
    ss >> name >> age >> value;

    // 输出结果
    std::cout << "Name: " << name << std::endl;
    std::cout << "Age: " << age << std::endl;
    std::cout << "Value: " << value << std::endl;

    return 0;
}

输出结果:

The answer is: 42, and the value of pi is: 3.14159
Name: John
Age: 25
Value: 3.14

总结

ostringstream、istringstream 和 stringstream 是 C++ 中非常有用的字符串流类,它们分别用于输出、输入和同时输入输出字符串。通过使用这些类,我们可以更方便地处理字符串数据,以及实现数据类型和字符串之间的转换。在实际编程中,可以根据具体需求选择合适的字符串流类来简化代码的实现。

参考资料

  1. C++ Reference: std::ostringstream. https://en.cppreference.com/w/cpp/io/basic_ostringstream
  2. C++ Reference: std::istringstream. https://en.cppreference.com/w/cpp/io/basic_istringstream
  3. C++ Reference: std::stringstream. https://en.cppreference.com/w/cpp/io/basic_stringstream
  4. GeeksforGeeks: C++ stringstream, ostringstream and istringstream. https://www.geeksforgeeks.org/cpp-stringstream-istringstream-and-ostringstream/

标签:std,istringstream,ostringstream,C++,stringstream,字符串
From: https://www.cnblogs.com/keep--fighting/p/17563552.html

相关文章

  • C++并行程序设计
    什么是并发?两个或两个以上事件或活动在同一时刻发生。如多个任务在多个CPU或CPU的多个核上同时执行,不存在CPU资源的竞争、等待行为并发程序的意义何在?充分发掘多核处理器的性能,提高计算速率仅供初次学习此内容创作,如有不对请大佬指正前置并行计算基础理论背景......
  • c++ 参数引用传递
    1#include<iostream>2#include<thread>3#include<windows.h>4usingnamespacestd;5voidA(int&a){6cout<<"address"<<&a<<endl;;7cout<<"value"<<a......
  • 【CJsonObject】C++ JSON 解析器使用教程
    能选封装的尽量不使用底层的一、CJsonObject简介CJsonObject是Bwar基于cJSON全新开发一个C++版的JSON库。CJsonObject的最大优势是轻量、简单好用,开发效率极高,尤其对多层嵌套json的读取和生成、修改极为方便。CJsonObject比cJSON简单易用得多,且只要不是有意不......
  • C++ 网络编程 asio 使用总结
    概述Asio是一个用于网络和低级I/O编程的跨平台C++库,它使用现代C++方法为开发人员提供一致的异步模型.io_contextio_context类为异步I/O对象的用户提供了核心I/O功能,包含:asio::ip::tcp::socketasio::ip::tcp::acceptorasio::ip::udp::socketasio::deadline_timer......
  • 109.C++类内初始化
    109.C++类内初始化C++11规定,可以为数据成员提供一个类内初始值。创建对象时,类内初始值用于初始化数据成员。像下面这样,cursor和height的类内初始值均为0。classScreen{private: intcursor=0; intheight=0;};1.不能用圆括号给类内初始值的原因C++primer(第5版)中......
  • C++学生健康信息收集系统[2023-07-18]
    C++学生健康信息收集系统[2023-07-18]学生健康信息收集系统简介一、 问题描述为了应对新型冠状病毒疫情,学校需要开发一个能够每天收集全校学生健康信息的系统,便于学校管理。不同学院以及学校的管理员,需要能方便地查看和导出健康状况异常的学生列表,并能对各类信息进行查看和统计......
  • C/C++用电管理数据[2023-07-18]
    C/C++用电管理数据[2023-07-18]用visualstudioc++设计一款程序来统计用电管理数据,要求能用菜单实现如下功能:(1)输入每个电表的用户名,楼栋号,抄表日期,电表读数。(3)按作者的用电量,从高到低排出每个用户的总用电量。(3)根据用户要求输出某用户某月(从键盘输入用户名和月份)的总用电量。......
  • C++语言程序设计任务书[2023-07-18]
    C++语言程序设计任务书[2023-07-18]C++语言程序设计任务书指导老师:李力课程编号:一、学时与学分学时:40学分:2二、实践目的计算机实践是本科计算机基础教学的一个重要环节。它对于巩固学生的计算机基础知识,增强学生的计算机应用水平,改善学生的知识结构,具有重要意义。三、......
  • C/C++文件加密解密[2023-07-18]
    C/C++文件加密解密[2023-07-18]题目27:文件加密文件的传输会有明文和密文的区别,明文发送是不安全的,用一个程序实现发送文件的加密和解密操作。加密算法,密钥设计由同学自己选择现有的加密解密算法或是自己设计。要求:(1)对文件的字符根据加密算法,实现文件加密。(2)对操作给出必......
  • C/C++学生成绩管理系统[2023-07-18]
    C/C++学生成绩管理系统[2023-07-18]学生成绩管理系统开发一个可以管理学生成绩以及学生基本信息的一个信息系统,至少实现如下功能:信息管理,支持信息的增、删、改、查操作,具体信息类型如下:(1) 管理学生信息 ,包括学号,姓名,年龄,班级等等信息。(2) 班级信息,包括班级编号、班级人数,......