题解 | #参数解析# C++解法,这个题做了一个下午,感觉好难
参数解析
http://www.nowcoder.com/practice/668603dc307e4ef4bb07bcd0615ea677
//整体思路:先将所有输入保存下来,然后剔除前后引号, //并记录位置,然后合并引号之间的字符串,然后输出 #include<bits/stdc++.h> using namespace std; int main() { vector<string> v1,v2; vector<int> vn; string tmp1; while(cin>>tmp1) { v1.push_back(tmp1); if(cin.get()=='\n') { for(int i=0;i<v1.size();i++) { if(v1[i][0]=='"') { v1[i].erase(0,1);//剔除前引号,并用vn记录位置 vn.push_back(i); } if(v1[i][v1[i].size()-1]=='"') { v1[i].erase(v1[i].end()-1,v1[i].end());//剔除后引号,并用vn记录位置 vn.push_back(i); } } for(int j=0;j<vn.size();j+=2)//两个位置为一组引号,所以j+=2 { string tmp2; for(int k=vn[j];k<vn[j+1];k++)//合并引号之间的字符串 { tmp2+=v1[k]; tmp2+=" "; } tmp2+=v1[vn[j+1]];//还要加上后引号所在的字符串 v1[vn[j]]=tmp2;//将合并后的字符串赋值给前引号开始的位置, } if(vn.size())//这里面是为了删除引号中间多余的字符串(包括后引号所在的字符串) { int kk=vn.size()-1; for(int k=kk;k>0;k-=2) { v1.erase(v1.begin()+vn[k-1]+1,v1.begin()+vn[k]+1); } } //剩下的就是正确的命令,输出就行了 cout<<v1.size()<<endl; for(auto x:v1) { cout<<x<<endl; } } } }