0Pricing
C++ Academy · 课时

用于解析的字符串流 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_argument

C++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 反馈 — 无需本地设置。

此课程中的所有课时

  1. std::string 与 C 风格字符数组
  2. 字符串操作:连接、子串、查找和替换
  3. 用于解析的字符串流 stringstream
  4. 字符串转换:to_string 和 stoi
← 返回 C++ Academy