AcWing 3199. 命令行选项
原题链接
中等
作者:
把这题Ac了
,
2024-11-09 16:25:08
,
所有人可见
,
阅读 2
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <sstream>
using namespace std;
const int N = 30;
bool st1[N],st2[N]; // s1表示无参 ,s2是有参
string ans[N];
string str;
int n;
int main(){
cin >> str >> n;
for(int i = 0;i < str.size();i++){
int k = str[i] - 'a';
if(i + 1 < str.size() && str[i + 1] == ':'){
st2[k] = true;
i++;
}else{
st1[k] = true;
}
}
getchar();
for(int i = 1;i <= n;i++){
printf("Case %d:",i);
//注意
getline(cin,str);
stringstream ssin(str);
vector<string> ops;
while (ssin >> str) ops.push_back(str);
for(int i = 0;i < 26;i++) ans[i].clear();
for(int i = 1;i < ops.size();i++){
if(ops[i][0] != '-' || ops[i][1] < 'a' || ops[i][1] > 'z' || ops[i].size() != 2) break;
int k = ops[i][1] - 'a';
if(st1[k]) ans[k] = "0";
else if(st2[k] && i + 1 < ops.size()) ans[k] = ops[i + 1],i++;
else break;
}
// Case 1: -a -l
for(int i = 0;i < 26;i++){
if(ans[i].size()){
cout << " -" << char(i + 'a');
if(st2[i]) cout << ' ' << ans[i];
}
}
cout << endl;
}
return 0;
}