https://leetcode.cn/problems/split-strings-by-separator/description/
解答
1 | class Solution { |
解释
这段代码定义了一个 Solution
类和它的成员函数 splitWordsBySeparator
。这个函数的目的是将一个字符串向量 words
中的每个字符串按照给定的分隔符 separator
分割,并将分割后的所有子字符串存储到一个新的向量 res
中。
让我们逐行解释这个函数:
1 | vector<string> splitWordsBySeparator(vector<string>& words, char separator) { |
这是 splitWordsBySeparator
函数的声明,它接收一个字符串向量的引用 words
和一个字符 separator
作为参数,并返回一个字符串向量。
1 | vector<string> res; |
定义一个字符串向量 res
,用于存储分割后的子字符串。
1 | for (string &word : words) { |
使用基于范围的 for
循环遍历输入的 words
向量中的每个字符串。循环体中的 word
是对 words
中字符串的引用。
1 | stringstream ss(word); |
创建一个 stringstream
对象 ss
,用于处理 word
字符串的分割。stringstream
是C++标准库中的一个非常有用的类,它允许你将字符串当作流来处理,这样可以方便地进行字符串的读取和转换操作。
1 | string sub; |
定义一个字符串 sub
,用于存储从 word
中分割出来的每个子字符串。
1 | while (getline(ss, sub, separator)) { |
使用 while
循环和 getline
函数读取 ss
中的内容到 sub
,直到遇到分隔符 separator
。getline
是一个标准库函数,可以从输入流中读取数据直到遇到指定的分隔符,并将读取的数据存储在第二个参数指定的字符串中。
1 | if (!sub.empty()) { |
如果 sub
不是空字符串,则执行下一步。这是为了避免将空字符串加入到结果向量中,空字符串可能会在源字符串的开头、结尾或者分隔符连续出现的情况下产生。
1 | res.push_back(sub); |
将非空的 sub
添加到结果向量 res
中。
1 | } |
这两个括号闭合了 if
条件语句和 while
循环。
1 | } |
闭合 for
循环。
1 | return res; |
函数返回包含所有分割出的子字符串的向量 res
。
1 | } |
闭合 splitWordsBySeparator
函数的定义。
这个函数的实现使用了标准库中的 stringstream
和 getline
来有效地执行字符串分割操作。它避免了手动遍历和处理字符串中每个字符的复杂性,显著简化了代码。