题意:
       按照以下规则划分字符串:
        

方法一:
直接模拟

思路:
        模拟。
        循环遍历字符串,遇到空格,则判断空格是否在双引号内;
        如果空格不在双引号内,则分割得到一个字符串;否则,不构成一个字符串。
        



#include <bits/stdc++.h>

using namespace std;
vector<string> v;

int main(){
    string s;
    getline(cin,s);//整行输入
    s+=' ';
    int len=s.size();
    int flag=0;
    string x="";
    for(int i=0;i<len;i++){//遍历
        if(s[i]==' '){//如果是空格并且不在双引号内,则加入字符串数组
            if(flag==0)
                v.push_back(x),x="";
            else
                x+=s[i];
        }else if(s[i]=='"'){//遇到双引号,则改变flag的值
            flag=!flag;
        }else{
            x+=s[i];
        }
    }
    cout << v.size() << endl;//输出
    for(int i=0;i<v.size();i++)
        cout << v[i] << endl;
    return 0;
}

时间复杂度:
空间复杂度:

方法二:
边界法

思路:
        遍历字符串。
        当遇到双引号,则获取双引号包裹的字符串;
        如果是空格,则加入字符串数组。

#include <bits/stdc++.h>

using namespace std;
vector<string> v;

int main(){
    string s;
    getline(cin,s);//整行输入
    s+=' ';
    int len=s.size();
    int flag=0;
    string x="";
    for(int i=0;i<len;i++){//遍历
        if(s[i]==' '){//如果是空格,则加入字符串数组
            v.push_back(x),x="";
        }else if(s[i]=='"'){//遇到双引号,则获取双引号包裹的字符串
            int j;
            for(j=i+1;j<len&&s[j]!='"';j++){
                x+=s[j];
            }
            i=j;
        }else{
            x+=s[i];
        }
    }
    cout << v.size() << endl;//输出
    for(int i=0;i<v.size();i++)
        cout << v[i] << endl;
    return 0;
}


时间复杂度:
空间复杂度: