题解 | #配置文件恢复#
配置文件恢复
https://www.nowcoder.com/practice/ca6ac6ef9538419abf6f883f7d6f6ee5?tpId=37&tqId=21289&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D1%26pageSize%3D50%26search%3D%26tpId%3D37%26type%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=
#include <iostream>
#include <locale>
#include <map>
#include <string>
#include <vector>
using namespace std;
// 匹配规则
map<vector<string>, string> rule = {
{{"reset"}, "reset what"},
{{"reset","board"}, "board fault"},
{{"board","add"}, "where to add"},
{{"board","delete"}, "no board at all"},
{{"reboot","backplane"}, "impossible"},
{{"backplane","abort"} ,"install first"}
};
// keys 的值
vector<vector<string>> keys = {
{"reset"},
{"reset","board"},
{"board","add"},
{"board","delete"},
{"reboot","backplane"},
{"backplane","abort"}
};
// 实现mysplit()
vector<string> mySplit(string com){
int left = 0;
int right = 1;
vector<string> ans;
while(right < com.size()){
if(com.at(right) == ' '){
ans.push_back(com.substr(left, right - left));
left = right + 1;
right = left;
}
right += 1;
}
ans.push_back(com.substr(left, right - left));
return ans;
}
// 根据com_list找到对应的value
string findCom(vector<string> com_list){
int ans = 0;
string com = "";
// cout << com_list[0] << " " << com_list[1] << endl;
for(vector<string> key : keys){
if(key.size() < 2){
continue;
}
// cout << key.at(0) << " " << key.at(1) << endl;
if(key.at(0).substr(0, com_list.at(0).size()) == com_list.at(0)
&&
key.at(1).substr(0, com_list.at(1).size()) == com_list.at(1))
{
ans++;
com = rule[key];
}
}
return (ans == 1) ? com : "unknown command";
}
// 通过 com 构造 comlist
string match(string com){
vector<string> com_list = mySplit(com);
// cout << com_list.size() << endl;
if(com_list.size() == 1){
if(keys[0][0].substr(0, com_list.at(0).size()) == com_list.at(0)){
return "reset what";
}else{
return "unknown command";
}
}else if(com_list.size() == 2){
return findCom(com_list);
}
return "unknown command";
}
int main() {
string a;
// cout << match("backplane abort");
// cout << match("b addr");
while (getline(cin, a)) { // 注意 while 处理多个 case
// cout << a << endl;
cout << match(a) << endl;
}
}
// 64 位输出请用 printf("%lld")
