题意:
按照以下规则划分字符串:
方法一:
直接模拟
思路:模拟。循环遍历字符串,遇到空格,则判断空格是否在双引号内;如果空格不在双引号内,则分割得到一个字符串;否则,不构成一个字符串。
#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;
}
时间复杂度:
空间复杂度:![]()



京公网安备 11010502036488号