<sstream>
是 C++ 标准库中的一个头文件,提供了用于在字符串和流之间进行转换的类。这些类包括 std::istringstream
、std::ostringstream
和 std::stringstream
,它们分别用于从字符串读取数据、向字符串写入数据以及同时进行读写操作。以下是这些类的常用函数和用法介绍:
1. std::istringstream
std::istringstream
用于从字符串中读取数据,类似于从文件或流中读取数据。
构造函数
std::istringstream(std::string str);
-
std::string str
:初始化字符串。
常用方法
-
std::istringstream::str()
:获取或设置内部字符串。 -
std::istringstream::clear()
:清除错误标志。 -
std::istringstream::eof()
:检查是否到达文件末尾。 -
std::istringstream::fail()
:检查是否发生错误。 -
std::istringstream::good()
:检查是否一切正常。 -
std::istringstream::ignore()
:忽略输入流中的字符。 -
std::istringstream::peek()
:查看下一个字符,但不提取。 -
std::istringstream::get()
:提取一个字符。 -
std::istringstream::getline()
:提取一行。
示例
#include <iostream>
#include <sstream>
#include <string>
int main() {
std::string input = "123 456 789";
std::istringstream iss(input);
int a, b, c;
iss >> a >> b >> c;
std::cout << "a = " << a << ", b = " << b << ", c = " << c << std::endl;
return 0;
}
2. std::ostringstream
std::ostringstream
用于向字符串写入数据,类似于向文件或流中写入数据。
构造函数
std::ostringstream();
常用方法
-
std::ostringstream::str()
:获取或设置内部字符串。 -
std::ostringstream::clear()
:清除错误标志。 -
std::ostringstream::flush()
:刷新缓冲区。 -
std::ostringstream::put()
:写入一个字符。 -
std::ostringstream::write()
:写入一段数据。
示例
#include <iostream>
#include <sstream>
#include <string>
int main() {
std::ostringstream oss;
oss << "Hello, " << "World!" << std::endl;
std::string result = oss.str();
std::cout << result;
return 0;
}
3. std::stringstream
std::stringstream
用于同时进行读写操作,类似于一个双向流。
构造函数
std::stringstream(std::string str);
-
std::string str
:初始化字符串。
常用方法
-
std::stringstream::str()
:获取或设置内部字符串。 -
std::stringstream::clear()
:清除错误标志。 -
std::stringstream::eof()
:检查是否到达文件末尾。 -
std::stringstream::fail()
:检查是否发生错误。 -
std::stringstream::good()
:检查是否一切正常。 -
std::stringstream::ignore()
:忽略输入流中的字符。 -
std::stringstream::peek()
:查看下一个字符,但不提取。 -
std::stringstream::get()
:提取一个字符。 -
std::stringstream::getline()
:提取一行。 -
std::stringstream::put()
:写入一个字符。 -
std::stringstream::write()
:写入一段数据。
示例
#include <iostream>
#include <sstream>
#include <string>
int main() {
std::stringstream ss("123 456 789");
int a, b, c;
ss >> a >> b >> c;
ss.clear(); // 清除错误标志
ss.str(""); // 清空内容
ss << "Hello, " << "World!" << std::endl;
std::string result = ss.str();
std::cout << result;
return 0;
}
4. 常用操作
字符串分割
std::istringstream
可以方便地用于字符串分割:
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
std::vector<std::string> split(const std::string& str, char delimiter) {
std::vector<std::string> tokens;
std::istringstream iss(str);
std::string token;
while (std::getline(iss, token, delimiter)) {
tokens.push_back(token);
}
return tokens;
}
int main() {
std::string input = "apple,banana,cherry";
std::vector<std::string> tokens = split(input, ',');
for (const auto& token : tokens) {
std::cout << token << std::endl;
}
return 0;
}
格式化输出
std::ostringstream
可以用于格式化输出:
#include <iostream>
#include <sstream>
#include <iomanip>
int main() {
int number = 12345;
std::ostringstream oss;
oss << "Number: " << std::setw(10) << std::setfill('0') << number;
std::string result = oss.str();
std::cout << result << std::endl;
return 0;
}
总结
<sstream>
提供了 std::istringstream
、std::ostringstream
和 std::stringstream
,用于在字符串和流之间进行转换。这些类可以方便地用于字符串分割、格式化输出和双向读写操作。通过合理使用这些类,可以简化字符串处理任务。