istringstream
是 C++ 标准库 <sstream>
提供的输入字符串流(类似 cin
),用于 解析字符串 并提取数据。
📌 1. 基本用法
#include <iostream>
#include <sstream> // 包含 sstream 头文件
using namespace std;int main() {string data = "123 45.67 test";istringstream ss(data); // 创建输入流,数据来自字符串int a;double b;string c;ss >> a >> b >> c; // 逐个读取数据cout << "整数: " << a << endl;cout << "浮点数: " << b << endl;cout << "字符串: " << c << endl;return 0;
}
🖥 输出
整数: 123
浮点数: 45.67
字符串: test
✅ 类似 cin
,但数据来源于字符串!
📌 2. 用 while
解析多个数据
#include <iostream>
#include <sstream>
using namespace std;int main() {string numbers = "10 20 30 40 50";istringstream ss(numbers);int num;while (ss >> num) { // 逐个提取整数cout << num << " ";}return 0;
}
🖥 输出
10 20 30 40 50
✅ 自动按空格分割,每次读取一个整数,直到字符串结束。
📌 3. 用 getline()
逐行读取
#include <iostream>
#include <sstream>
using namespace std;int main() {string data = "Hello World\nC++ Programming\nistringstream";istringstream ss(data);string line;while (getline(ss, line)) { // 按行读取cout << "行: " << line << endl;}return 0;
}
🖥 输出
行: Hello World
行: C++ Programming
行: istringstream
✅ 可用于读取多行文本!
📌 4. 按 ,
或 :
自定义分割
#include <iostream>
#include <sstream>
using namespace std;int main() {string csv = "apple,banana,orange,grape";istringstream ss(csv);string fruit;while (getline(ss, fruit, ',')) { // 以 ',' 作为分隔符cout << fruit << endl;}return 0;
}
🖥 输出
apple
banana
orange
grape
✅ 可以用 getline(ss, var, '分隔符')
解析 CSV 文件等格式。
📌 5. istringstream
结合 sscanf()
#include <iostream>
#include <sstream>
using namespace std;int main() {string fraction = "-5/7";istringstream ss(fraction);int num, den;char slash;ss >> num >> slash >> den; // 按 "整数/整数" 解析cout << "分子: " << num << ", 分母: " << den << endl;return 0;
}
🖥 输出
分子: -5, 分母: 7
✅ 适用于解析数学表达式,如分数 a/b
、时间 HH:MM:SS
等。
🔹 istringstream
适用场景
✔ 解析字符串(如 cin
,但数据来源是 string
)
✔ 按空格或特定字符拆分字符串(如 CSV、日志分析)
✔ 逐行读取文本(如配置文件、日志文件)
✔ 提取数据并转换为不同类型(如 int
、double
)
🚀 适用于字符串解析、数学表达式解析、文件数据处理等场景!