c++ std::stringstream

发布于:2025-05-16 ⋅ 阅读:(19) ⋅ 点赞:(0)

std::stringstream是 C++标准库中的一个非常有用的类,它允许你将字符串像流一样进行读写操作。它结合了字符串的灵活性和流操作的便利性,非常适合处理字符串格式化、解析和数据转换等任务。

1.包含头文件
在使用std::stringstream之前,需要包含头文件<sstream>

#include <sstream>

2.常见用法

2.1 字符串格式化
std::stringstream可以用来将多个数据类型组合成一个字符串,类似于sprintf,但更安全、更灵活。

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

int main() {
    std::stringstream ss;
    int age = 25;
    std::string name = "Alice";

    // 向 stringstream 中写入数据
    ss << "Name: " << name << ", Age: " << age;

    // 将 stringstream 的内容转换为字符串
    std::string result = ss.str();

    std::cout << result << std::endl; // 输出:Name: Alice, Age: 25

    return 0;
}

2.2 字符串分割
std::stringstream可以用来按分隔符分割字符串,类似于strtok,但更安全、更灵活。

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

int main() {
    std::string input = "apple,banana,orange";
    std::stringstream ss(input);
    std::string token;
    std::vector<std::string> tokens;

    // 按逗号分割字符串
    while (std::getline(ss, token, ',')) {
        tokens.push_back(token);
    }

    // 输出分割后的结果
    for (const auto& t : tokens) {
        std::cout << t << std::endl;
    }

    return 0;
}

2.3 数据转换
std::stringstream可以用来将字符串转换为其他数据类型,或者将其他数据类型转换为字符串。

字符串转数字

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

int main() {
    std::string str = "12345";
    std::stringstream ss(str);
    int num;

    // 从字符串中读取数字
    ss >> num;

    std::cout << "The number is: " << num << std::endl; // 输出:The number is: 12345

    return 0;
}

数字转字符串

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

int main() {
    std::stringstream ss;
    int num = 12345;

    // 将数字写入 stringstream
    ss << num;

    // 将 stringstream 的内容转换为字符串
    std::string str = ss.str();

    std::cout << "The string is: " << str << std::endl; // 输出:The string is: 12345

    return 0;
}

3.使用std::istringstreamstd::ostringstream
std::stringstream是一个双向流,既可以读也可以写。如果你只需要单向操作,可以使用std::istringstream(用于读取)和std::ostringstream(用于写入)。

3.1std::istringstream示例

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

int main() {
    std::string input = "100 200 300";
    std::istringstream iss(input);
    int a, b, c;

    // 从字符串中读取多个值
    iss >> a >> b >> c;

    std::cout << "a: " << a << ", b: " << b << ", c: " << c << std::endl; // 输出:a: 100, b: 200, c: 300

    return 0;
}

3.2std::ostringstream示例

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

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

    // 将数据写入 ostringstream
    oss << "The value of pi is approximately " << pi;

    // 将 ostringstream 的内容转换为字符串
    std::string result = oss.str();

    std::cout << result << std::endl; // 输出:The value of pi is approximately 3.14159

    return 0;
}

4.总结
std::stringstream是一个非常强大的工具,适用于以下场景:

• 字符串格式化:将多个数据类型组合成一个字符串。

• 字符串解析:按分隔符分割字符串。

• 数据转换:在字符串和其他数据类型之间进行转换。

希望这些示例能帮助你更好地理解和使用std::stringstream!如果有任何问题,欢迎随时问我哦。