#include<iostream> #include<cstring> #include<string> #include<vector> #include<map> using namespace std; void spilt(vector<string>& v, char s[], char t[]) { char *sp; sp=strtok(s,t); while(sp) { v.push_back(sp); sp=strtok(NULL,t); } } void mygetline(char pc[]) { char c; while((c=getchar())!=‘\n‘&&c!=EOF) *pc++=c; *pc=‘\0‘; } int main() { string format; char s[257]; int i,j,n; cin>>format>>n; getchar(); for(i=1;i<=n;i++) { vector<string> sv; map<string,string> m; mygetline(s); // 切分命令行:命令和各个参数分开 spilt(sv,s," "); // 处理各个参数,放入map变量m中 for(j=1;j<(int)sv.size();j++) { // 判断是否是选项,选项则处理 if(sv[j].size()==2&&sv[j][0]==‘-‘) { int pos=format.find(sv[j][1]); // 选项在格式中未找到则出错结束 if(pos==-1) break; // 选项未出现过则添加 if(m.find(sv[j])==m.end()) m[sv[j]]=""; // 更新参数:后出现优先 if(format[pos+1]==‘:‘&&j+1<(int)sv.size()) { m[sv[j]]=sv[j+1]; j++; } } else break; } cout<<"Case "<<i<<":"; for(map<string,string>::iterator iter=m.begin();iter!=m.end();iter++) { cout<<" "<<iter->first; if(iter->second!="") cout<<" "<<iter->second; } cout<<endl; } return 0; }
时间: 2024-10-21 20:12:58