📜  sstream c++ (1)

📅  最后修改于: 2023-12-03 15:05:21.941000             🧑  作者: Mango

sstream C++

ssteam 是 C++ 中一个十分有用的标准库,它能够从字符串中提取数据,也能把数据转变为字符串。

为什么需要 sstream

在某些场景下,我们需要一个将数字和字符串相互转化的工具,比如 itoaatofatoi这些函数都需要手动编写或依赖库,在C++11之前必须使用 itoaatof,但它们并没有很好的处理浮点数所带来的精度、舍入等问题。随着C++11的到来,我们可以更好地利用 stringstream 实现对字符串处理的需求。

对于 stringstream 这个类,我们可以通过其提供的接口函数将不同类型的数据转化成一个字符串输出,也可以通过将字符串读入就以解析出内部的数据。

stringstream 的实现基于 iostream 以及基于它的一些实现。因此,它是一个绑定的流。

示例:
#include <iostream>
#include <sstream>

int main()
{
    std::stringstream ss;
    ss << "The answer is: " << 42;

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

    std::cout << str << std::endl;

    return 0;
}

运行结果:

The answer is: 42

注意:以上的代码中 stringstream 是一个类,需要通过构造函数进行初始化。

stringstream 的主要操作

下面介绍一下 stringstream 的常用操作:

<< 操作符

当我们向 stringstream 通过 << 操作符插入数据时,将自动将这些数据转为字符串并添加到串流中。

示例:

#include <iostream>
#include <sstream>

int main()
{
    std::stringstream str;
    str << "hello " << "world " << "!" << std::endl;

    std::cout << str.str();

    return 0;
}

执行的结果是:

hello world !
>> 操作符

当我们从 stringstream 通过 >> 操作符读取数据时,将自动将这些数据从串流中解析。

示例:

#include <iostream>
#include <sstream>

int main()
{
    std::stringstream str("23.65 this is a string data");
    double num;
    std::string data;

    str >> num >> data;

    std::cout << "Num: " << num << std::endl;
    std::cout << "Data: " << data << std::endl;

    return 0;
}

执行结果是:

Num: 23.65
Data: this

注意:>> 操作符具有类似于 cin 的功能,可以按类型拆分从 stringstream 中读取数据。

.str() 函数

通过 .str() 函数可以将 stringstream 中的数据转为字符串。

示例:

#include <iostream>
#include <sstream>

int main()
{
    std::stringstream str;
    str << "hello " << "world " << "!" << std::endl;

    std::cout << "String: " << str.str();

    return 0;
}

执行结果:

String: hello world !
.clear() 函数

通过 .clear() 函数可以清空 stringstream 中的数据。

#include <iostream>
#include <sstream>

int main()
{
    std::stringstream str;
    str << "hello " << "world " << "!" << std::endl;

    std::cout << "String: " << str.str();

    str.clear();

    std::cout << "Cleared!";

    return 0;
}

执行结果:

String: hello world !

Cleared!
总结

本文主要介绍了 stringstream 的使用及其常见操作。

在 C++ 中,stringstream 经常被用于将数字转化为字符串、将字符串解析为数字,以及将符号表达式转化为运算表达式等操作。