用于解析的字符串流 stringstream
使用 std::stringstream 将文本拆分为标记,并解析为指定类型的值。
用于解析的字符串流 stringstream 是 CoddyKit 上的免费 C++ Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C++ Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C++ Academy 课程共包含 4 节课。
什么是字符串流?
std::stringstream 将字符串封装在输入输出流接口中。您可以使用 >> 和 << 对其进行读写,就像使用 cin 或 cout 一样。
#include <sstream>
std::stringstream ss;使用字符串流构建字符串
您可以使用它从多种类型构建复杂字符串。调用 .str() 即可获取结果。
std::stringstream out;
out << "User: " << name << ", Age: " << age;
std::string result = out.str();使用字符串流解析
从一个字符串初始化字符串流,然后使用 >> 提取值。它会以空白字符为分隔进行标记化。
std::stringstream in("42 3.14 hello");
int i; double d; std::string s;
in >> i >> d >> s;将一行读取为多个标记
将 getline 与字符串流结合,即可逐行进行标记化。
std::string line = "1 2 3 4 5";
std::stringstream ss(line);
int n;
while (ss >> n) {
std::cout << n * n << " ";
}
// 1 4 9 16 25按分隔符拆分
在字符串流上调用 getline 时传入分隔符,即可按逗号、分号或任意字符进行拆分。
std::string csv = "apple,banana,cherry";
std::stringstream ss(csv);
std::string fruit;
while (std::getline(ss, fruit, ',')) {
std::cout << fruit << "\n";
}istringstream 与 ostringstream
共有三种类型:
std::istringstream—— 只读std::ostringstream—— 只写std::stringstream—— 读写均可
为清晰起见,请使用功能范围最小的类型。
检查解析错误
如果提取失败(例如类型不正确),流会设置失败位。请在提取后检查 !ss 或 ss.fail()。
std::stringstream ss("not_a_number");
int x;
if (!(ss >> x)) {
std::cout << "Parse failed";
}重置字符串流
要重复使用字符串流,请清除其状态和内容。
std::stringstream ss;
ss << "first";
ss.str(""); // clear contents
ss.clear(); // clear flags
ss << "second";数字转字符串
对于简单的转换,std::to_string 比字符串流更简洁。
std::string s = std::to_string(42); // "42"
std::string p = std::to_string(3.14); // "3.140000"不使用流将字符串转换为数字
std::stoi、std::stod 和 std::stoll 会从字符串解析数字,并在输入无效时抛出异常。
int n = std::stoi("42");
double d = std::stod("3.14");
// std::stoi("xyz") throws std::invalid_argumentC++17 std::from_chars
为了获得最高速度,std::from_chars 可以在 <charconv> 中无异常、无内存分配地进行解析。它非常适合高频执行路径。
快速检查
使用 std::stringstream 必须包含哪个头文件?
回顾
std::stringstream 可以将字符串转换为流,从而方便地进行解析和格式化。将它与 std::getline 结合即可按分隔符拆分。对于简单情况,请优先使用 std::to_string 和 std::stoi。
常见问题解答
「用于解析的字符串流 stringstream」课时是免费的吗?
是的 — 「用于解析的字符串流 stringstream」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C++ Academy 课程的其余内容,请升级到 CoddyKit PRO。 C++ Academy 课程共包含 4 节课。
「用于解析的字符串流 stringstream」这节课中我会学到什么?
使用 std::stringstream 将文本拆分为标记,并解析为指定类型的值。 你通过在浏览器中直接运行的动手代码来练习 C++ Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 C++ Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 C++ Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「用于解析的字符串流 stringstream」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 C++ Academy 课中编写并运行代码吗?
能。每节 C++ Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- std::string 与 C 风格字符数组
- 字符串操作:连接、子串、查找和替换
- 用于解析的字符串流 stringstream
- 字符串转换:to_string 和 stoi