题解 | #配置文件恢复#
配置文件恢复
https://www.nowcoder.com/practice/ca6ac6ef9538419abf6f883f7d6f6ee5
#include <iostream>
#include <string>
#include <unordered_map>
#include <vector>
#include <utility>
using namespace std;
bool isPre(string str1, string str2){//判断str1是不是str2的前缀
for(int i = 0; i < str1.length(); i++){
if(str1[i] != str2[i]) return false;
}
return true;
}
int main() {
string str;
vector<pair<string, string>> vec = {{"reset", "board"}, {"board", "add"}, {"board", "delete"}, {"reboot", "backplane"}, {"backplane", "abort"}};
while (getline(cin, str)) {
string firstWord, secondWord;
bool flag = false;//表示输入的字串是一个还是两个
for(int i = 0; i < str.length(); i++){
if(str[i] == ' '){
flag = true;
firstWord = str.substr(0, i);
secondWord = str.substr(i+1, str.length() - i - 1);
break;
}
}
if(!flag){
if(isPre(str, "reset")) cout << "reset what" << endl;
else cout << "unknown command" << endl;
}
else{
int matchValue = 0;
bool matched = false;
for(int i = 0; i < 5; i++){
if(matched && isPre(firstWord, vec[i].first) && isPre(secondWord, vec[i].second)){//匹配结果不唯一
matchValue = 0;//表示匹配失败
break;
}
else if (isPre(firstWord, vec[i].first) && isPre(secondWord, vec[i].second)) {
matched = true;
matchValue = i + 1;
}
}
switch (matchValue) {
case 1: cout << "board fault" << endl; break;
case 2: cout << "where to add" << endl; break;
case 3: cout << "no board at all" << endl; break;
case 4: cout << "impossible" << endl; break;
case 5: cout << "install first" << endl; break;
default: cout << "unknown command" << endl; break;
}
}
}
return 0;
}