感觉自己写的哪里都对,但就是过不了,看了别人的答案也感觉思路很一致,最后还是折腾了重新写才过了
#include<iostream>
#include<sstream>
#include<cstdio>
#include<string>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
//freopen("d:\\input.txt","r",stdin);
string strline;
cin>>strline;
int m=26;
vector<int> para(m,0);//0表示不存在,1表示不带参数,2表示带参数
for(int i=0;i<strline.size();i++){
if(strline[i]==':'){para[strline[i-1]-'a']=2;}
else para[strline[i]-'a']=1;
}
int n;
scanf("%d",&n);cin.ignore();
vector<string> argu(m);
for(int i=0;i<n;i++){
getline(cin,strline);
stringstream ss(strline);
string str;
ss>>str;
while(ss>>str){
if (str[0] == '-') {
int r = str[1] - 'a';
if (para[r] == 0) { // 非合法选项
break;//没有这一句的话,输入无效命令并不会停止
}
else if (para[r] == 1) {
argu[r]=" ";
}
else if (para[r] == 2) {
if (ss.eof()) break; // 有参数选项没有输入参数
ss >> str;
argu[r] = str;
}
}
else { // 非合法参数
break;
}
}
cout << "Case " << i+1<< ":";
for (int j = 0; j<26; j++) {
if (para[j] == 1 && argu[j] != "") {
cout << " -" << char(j + 'a');
}
if (para[j] == 2 && argu[j] != "") {
cout << " -" << char(j + 'a') <<" "<< argu[j];
}
argu[j] = "";
}
cout<<endl;
}
return 0;
}