题解 | #配置文件恢复#
配置文件恢复
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; }