2788-按分隔符拆分字符串

1.5k words

https://leetcode.cn/problems/split-strings-by-separator/description/

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public:
vector<string> splitWordsBySeparator(vector<string>& words, char separator) {
vector<string> res;
for (string& word : words) {
stringstream ss(word);
string sub;
while (getline(ss, sub, separator)) {
if (sub != "") {
res.push_back(sub);
}
}
}
return res;
}
};

解释

这段代码定义了一个 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,直到遇到分隔符 separatorgetline 是一个标准库函数,可以从输入流中读取数据直到遇到指定的分隔符,并将读取的数据存储在第二个参数指定的字符串中。

1
if (!sub.empty()) {

如果 sub 不是空字符串,则执行下一步。这是为了避免将空字符串加入到结果向量中,空字符串可能会在源字符串的开头、结尾或者分隔符连续出现的情况下产生。

1
res.push_back(sub);

将非空的 sub 添加到结果向量 res 中。

1
2
    }
}

这两个括号闭合了 if 条件语句和 while 循环。

1
}

闭合 for 循环。

1
return res;

函数返回包含所有分割出的子字符串的向量 res

1
}

闭合 splitWordsBySeparator 函数的定义。

这个函数的实现使用了标准库中的 stringstreamgetline 来有效地执行字符串分割操作。它避免了手动遍历和处理字符串中每个字符的复杂性,显著简化了代码。

Comments