c++ sstream
C++ 的<sstream>库提供了一种将字符串作为输入输出流来处理的方式,类似于标准输入输出流(cin和cout它主要用于字符串的读取、格式化和转换等操作。以下是关于<sstream>库的详细介绍,包括相关概念和常用函数。
·
C++ 的 <sstream> 库提供了一种将字符串作为输入输出流来处理的方式,类似于标准输入输出流(cin 和 cout)。它主要用于字符串的读取、格式化和转换等操作。以下是关于 <sstream> 库的详细介绍,包括相关概念和常用函数。
1. 核心概念
<sstream> 库定义了三个主要的类:
std::istringstream:用于从字符串中读取数据,类似于std::istream。std::ostringstream:用于向字符串写入数据,类似于std::ostream。std::stringstream:结合了读取和写入的功能,类似于std::iostream。
这些类都继承自 std::istream、std::ostream 或 std::iostream,因此可以使用与标准输入输出流类似的流操作符(如 << 和 >>)。
2. 包含头文件
在使用 <sstream> 库之前,需要包含头文件:
#include <sstream>
3. 创建流对象
根据需求选择合适的流对象:
std::istringstream:用于从字符串读取数据。std::istringstream iss("Hello World");std::ostringstream:用于向字符串写入数据。std::ostringstream oss;std::stringstream:用于同时读取和写入字符串。std::stringstream ss;
4. 常用函数和操作
4.1 std::istringstream
- 读取数据:使用
>>操作符从字符串中读取数据。std::istringstream iss("123 456"); int a, b; iss >> a >> b; // a = 123, b = 456 std::getline():用于读取整行数据。std::istringstream iss("Hello\nWorld"); std::string line; std::getline(iss, line); // line = "Hello" std::getline(iss, line); // line = "World"str():获取或设置字符串内容。std::istringstream iss("Initial"); std::string content = iss.str(); // content = "Initial" iss.str("New Content");
4.2 std::ostringstream
- 写入数据:使用
<<操作符向字符串写入数据。std::ostringstream oss; oss << "Hello " << 123 << " World"; std::string result = oss.str(); // result = "Hello 123 World" str():获取或设置字符串内容。std::ostringstream oss; oss << "Initial"; std::string content = oss.str(); // content = "Initial" oss.str("New Content");
4.3 std::stringstream
- 读写操作:结合了读取和写入的功能。
std::stringstream ss; ss << "Hello " << 123; // 写入 std::string line; ss >> line; // 读取,line = "Hello" int num; ss >> num; // 读取,num = 123 str():获取或设置字符串内容。std::stringstream ss("Initial"); std::string content = ss.str(); // content = "Initial" ss.str("New Content");
5. 流状态标志
<sstream> 类继承自标准流类,因此可以使用以下状态标志来检查流的状态:
good():检查流是否处于良好状态。if (iss.good()) { // 流状态良好 }eof():检查是否到达文件末尾。if (iss.eof()) { // 已到达字符串末尾 }fail():检查是否发生读写错误。if (iss.fail()) { // 发生读写错误 }bad():检查是否发生严重错误。if (iss.bad()) { // 发生严重错误 }
6. 格式化操作
<sstream> 支持与标准输入输出流类似的格式化操作,例如:
- 宽度和精度:
std::ostringstream oss; oss << std::setw(10) << std::setprecision(2) << 3.14159; std::string result = oss.str(); // result = " 3.14" - 十六进制和八进制:
std::ostringstream oss; oss << std::hex << 255; // 十六进制 std::string result = oss.str(); // result = "ff"
7. 示例代码
以下是一个综合示例,展示 <sstream> 的常见用法:
#include <iostream>
#include <sstream>
#include <iomanip>
int main() {
// 使用 std::istringstream 从字符串读取数据
std::istringstream iss("123 456 Hello");
int a, b;
std::string word;
iss >> a >> b >> word;
std::cout << "Read from iss: " << a << ", " << b << ", " << word << std::endl;
// 使用 std::ostringstream 向字符串写入数据
std::ostringstream oss;
oss << "The answer is " << 42 << "!";
std::string result = oss.str();
std::cout << "Written to oss: " << result << std::endl;
// 使用 std::stringstream 进行读写操作
std::stringstream ss;
ss << "100 200";
int x, y;
ss >> x >> y;
std::cout << "Read from ss: " << x << ", " << y << std::endl;
// 格式化输出
std::ostringstream oss2;
oss2 << std::setw(10) << std::setprecision(2) << 3.14159;
std::cout << "Formatted output: " << oss2.str() << std::endl;
return 0;
}
8. 总结
<sstream> 库提供了一种灵活的方式来处理字符串的输入输出操作。它通过流的方式,使得字符串的读取、写入和格式化变得简单而直观。无论是在数据解析、格式化输出还是字符串转换等场景中,<sstream> 都是一个非常有用的工具。
更多推荐
所有评论(0)