C++ 字符串怎么分割

183 阅读2分钟

一、单个分割 如:用空格 用逗号

把一行字符串按照空格进行分割,每一个分割出来的部分可以存在 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分隔符少、简单快速好写
自定义分隔符函数逐字符解析多种分隔符、灵活稍复杂但更通用