我的思路比较简单也容易理解 给字符串里的每个字符标记属性flag

可以理解为

flag为0 即为文本字符 flag为1 即为分割字符

那么需要排除的就是引号内的空格,将其flag不置为1;

#include <iostream>
#include <vector>
#include <string>

using namespace std;

void cut(string str) {
    vector<string> result;
    int Qflag = 0;//未出现引号
    int length = str.size();
    int flag[1001] = {0};
    for (int i = 0; i < length; i++) {
        if (str[i] == '"') {
            flag[i] = 1;
            switch (Qflag) {
                case 0:
                    Qflag = 1;
                    break;
                case 1:
                    Qflag = 0;
                    break;
            }
        }
        if (str[i] == ' ') {
            if (Qflag == 0) {
                flag[i] = 1;
            }
        }
    }
    string temp = "";
    for (int i = 0; i < length; i++) {

        if (flag[i] != 1) {
            temp += str[i];
        } else {
            if (!temp.empty()) {
                result.push_back(temp);
            }
            temp = "";
        }
    }
    if (!temp.empty()) {
        result.push_back(temp);
    }
    cout << result.size() << endl;
    for (int i = 0; i < result.size(); i++) {
        cout << result[i] << endl;
    }
}

int main() {
    string str;
    while (getline(cin, str)) {
        cut(str);
    }
    return 0;
}