istringstream
istringstream iss(line);,这里是将一个字符串line绑定到流对象iss上
iss >> num就是从流中读取数据到变量num中,类似于从标准输入读取。这应该是基本用法,分割字符串中的空格分隔的数据。
istringstream常用于处理以空格分隔的字符串,比如读取每行的单词。比如在循环中使用stream >> str来逐个提取单词。
1. 头文件
必须包含 <sstream>
头文件
例如:
#include <sstream> | |
#include <string> // 需要操作字符串时包含 |
-
初始化:通过字符串
例如:line
构造istringstream
对象,将字符串绑定到输入流std::string line = "123 3.14 hello"; std::istringstream iss(line); // 将字符串 line 绑定到流对象 iss -
提取数据:使用
例如:>>
操作符按空格分隔读取数据,支持自动类型转换int num; double pi; std::string text; iss >> num >> pi >> text; // 输出:num=123, pi=3.14, text="hello"
2. 典型应用场景
-
分割字符串:处理以空格分隔的字符串,逐个提取单词或数值
例如:std::string line = "apple banana cherry"; std::istringstream iss(line); std::string word; while (iss >> word) { // 循环读取每个单词 std::cout << word << std::endl; // 输出:apple → banana → cherry } -
类型转换:将字符串中的数字部分转换为整型、浮点型等
例如:std::string line = "42"; std::istringstream iss(line); int value; iss >> value; // 字符串 "42" 转换为整型 42
3. 注意事项
- 错误处理:若数据类型不匹配(如尝试将非数字字符串读入
int
),流会进入错误状态,后续操作失效
可通过检查流状态或重置流处理错误。 - 性能:适用于简单场景,频繁创建流对象可能影响性能
4. 与其他流的区别
istringstream
专用于从字符串输入,而ifstream
用于文件输入stringstream
类支持双向操作(输入和输出),而istringstream
仅支持输入
示例代码
#include <sstream> | |
#include <iostream> | |
int main() { | |
std::string line = "1024 3.14 world"; | |
std::istringstream iss(line); // 绑定字符串到流 | |
int a; | |
float b; | |
std::string c; | |
iss >> a >> b >> c; // 按顺序提取数据 | |
std::cout << a << " " << b << " " << c; // 输出:1024 3.14 world | |
return 0; | |
} |