一、单个分割 如:用空格 用逗号
把一行字符串按照空格进行分割,每一个分割出来的部分可以存在 part 里。
如果你想把这些分割后的单词依次存到 a[101] 数组里(也就是 string 类型的数组),那么你只需要在 while(getline(ss, part, ' ')) 里面加几句处理代码,比如用一个下标 i 来记录数组下标。
下面是完整写法,加上注释说明:
cpp
复制编辑
#include <iostream>
#include <sstream>
using namespace std;
int main() {
string a[101]; // 存放最多101个分割后的单词
string str;
getline(cin, str); // 输入一整行
stringstream ss(str); // 构造字符串流
string part;
int i = 0; // 数组下标
while (getline(ss, part, ' ')) {
if (part != "") { // 去掉连续空格导致的空字符串
a[i++] = part; // 把分割后的单词存到数组里
}
}
// 输出一下看看分割结果
for (int j = 0; j < i; j++) {
cout << a[j] << endl;
}
return 0;
}
🧠 注意事项:
getline(ss, part, ' ')是按空格分割;- 如果有多个空格(比如
"a b"),会出现空字符串,所以需要判断if (part != ""); string a[101]限制了最多只能存 101 个单词;如果有很多数据建议改用vector<string>。
二、多个符号都可分割 如:用空格或逗号或分号都算分割
如果既有 空格 也有 逗号(比如 "apple, banana orange,grape")都要作为分割符,getline(ss, part, ' ') 就不能一次性处理多个分隔符。
✅ 解决方案 1:先替换逗号为空格,再用原来的方法分割
这是最简单的思路 —— 把所有的逗号都换成空格,然后照常用 stringstream + getline 分割空格。
cpp
复制编辑
#include <iostream>
#include <sstream>
using namespace std;
int main() {
string a[101];
string str;
getline(cin, str);
// 把逗号换成空格
for (char &c : str) {
if (c == ',') c = ' ';
}
stringstream ss(str);
string part;
int i = 0;
while (getline(ss, part, ' ')) {
if (part != "") {
a[i++] = part;
}
}
// 输出分割结果
for (int j = 0; j < i; j++) {
cout << a[j] << endl;
}
return 0;
}
✅ 解决方案 2:使用 istringstream + getline 手动跳过多个分隔符(更通用)
如果你要支持更多分隔符,比如:空格、逗号、句号等,你可以手动一个字符一个字符去处理。
cpp
复制编辑
#include <iostream>
#include <vector>
using namespace std;
bool is_separator(char c) {
return c == ' ' || c == ','; // 你可以加更多,比如 || c == '.'
}
int main() {
string str;
getline(cin, str);
vector<string> words;
string temp = "";
for (char c : str) {
if (is_separator(c)) {
if (!temp.empty()) {
words.push_back(temp);
temp = "";
}
} else {
temp += c;
}
}
if (!temp.empty()) words.push_back(temp); // 加入最后一个单词
// 输出分割结果
for (const string &word : words) {
cout << word << endl;
}
return 0;
}
总结:
| 方法 | 适用场景 | 说明 |
|---|---|---|
把逗号替换为空格 + getline | 分隔符少、简单 | 快速好写 |
| 自定义分隔符函数逐字符解析 | 多种分隔符、灵活 | 稍复杂但更通用 |