参考c++
https://blog.csdn.net/wjh2622075127/article/details/81639534ide
思路工具
map容器 存储 有效命令表 和 输入的有效命令的参数测试
set容器 存储 输入的有效命令 (可自动排序)spa
在有效命令表的存储中加上‘-’,避免有效命令检索的麻烦.net
实现命令行
1 #include<bits/stdc++.h> 2 3 4 using namespace std; 5 6 map<string,int> table;//有效命令表 7 vector<string> order;//输入命令 8 map<string,string> can;//参数 9 set<string> ans; //输入命令中的有效命令 10 11 int main(){ 12 string s; 13 cin>>s; 14 //有效命令表 15 for(size_t i=0;i<s.size();i++){ 16 string no; 17 stringstream t; 18 t<<'-'<<s[i]; 19 t>>no; 20 if(i<s.size()-1&&s[i+1]==':'){//有参数 21 table[no]=1; 22 i++; 23 } 24 else{//无参数 25 table[no]=0; 26 } 27 } 28 29 int n; 30 cin>>n; 31 cin.get(); 32 33 for(int i=1;i<=n;i++){ 34 35 order.clear(); 36 can.clear(); 37 ans.clear(); 38 39 getline(cin,s); 40 stringstream ss; 41 ss<<s; 42 while(ss>>s){ 43 order.push_back(s); 44 } 45 //分析输入命令 46 for(size_t j=1;j<order.size();j++){ 47 //命令是否合法 48 if(table.count(order[j])==0){ 49 break; 50 } 51 //不带参 52 if(table[order[j]]==0){ 53 ans.insert(order[j]); 54 } 55 //带参 56 else if(j<order.size()-1){ 57 ans.insert(order[j]); 58 can[order[j]]=order[j+1]; 59 j++; 60 } 61 else{ 62 break; 63 } 64 } 65 //输出 66 cout<<"Case "<<i<<":"; 67 set<string>::iterator is=ans.begin(); 68 while(is!=ans.end()){ 69 if(can.count(*is)>0){ 70 cout<<' '<<*is<<' '<<can[*is]; 71 } 72 else{ 73 cout<<' '<<*is; 74 } 75 is++; 76 } 77 cout<<endl; 78 } 79 80 return 0; 81 }
题目code