參考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