题解 | #配置文件恢复# C++好理解
配置文件恢复
http://www.nowcoder.com/practice/ca6ac6ef9538419abf6f883f7d6f6ee5
#include<bits/stdc++.h> #include<string.h> using namespace std; int main() { string tmp; vector<string> cmd; while(cin>>tmp) { vector<vector<string>> a{ {"reset"},\ {"reset", "board"},\ {"board", "add"},\ {"board" ,"delete"},\ {"reboot", "backplane"}, {"backplane", "abort"}}; vector<string> b={"reset what","board fault","where to add",\ "no board at all","impossible","install first","unknown command"}; cmd.push_back(tmp); if(cin.get()=='\n') { if(cmd.size()==1) //输入一个参数的情况 { if(strncmp(cmd[0].data(),a[0][0].data(),cmd[0].size())==0) { cout<<b[0]<<endl; } } if(cmd.size()==2) //输入两个参数的情况 { int flag=0;//标记匹配上的次数 string s_tmp; for(int i=1;i<a.size();i++) //i从1开始,因为第一个命令是一个字符串,这里可以直接跳过了 { //下面这句是两个参数分别和命令的两个字符串进行比较 if((strncmp(cmd[0].data(),a[i][0].data(),cmd[0].size())==0)&&(strncmp(cmd[1].data(),a[i][1].data(),cmd[1].size())==0)) { s_tmp=b[i]; flag++; } } if(flag==0||flag>1) //和所有的命令没有匹配上或者匹配上了多次 { cout<<b[6]<<endl; } else //和所有命令只匹配上了一次 cout<<s_tmp<<endl; } cmd.clear(); } } }