题解 | #配置文件恢复#
配置文件恢复
https://www.nowcoder.com/practice/ca6ac6ef9538419abf6f883f7d6f6ee5
// HJ66 配置文件恢复.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{
string str;//定义一个待查找的字符串
string signal = "reset";//将只有一个字串的情况单独列出来等会查找用
vector<vector<string>>dp = { {"reset","board","board fault"},{"board","add","where to add"},{"board","delete","no board at all"},
{"reboot","backplane","impossible"},{"backplane","abort","install first"} };//定义一个二维数组,一共五组,每组前两位为两个字串第三位为结果
while (getline(cin, str))//可循环输入的语句,注意输入用getline而不是用cin
{
string res = "";//定义一个输出字符串,等待输出结果
int n=count(str.begin(), str.end(), ' ');//定义一个整数n记录输入的字符串中有几个空格
if (n == 0)//判断没有空格的情况为只输入了一个字串,单独处理即可
{
if (signal.find(str) == 0)//唯一的单独字串直接处理使用find函数查找是否从第一位开始的,如不是则说明不匹配
{
cout << "reset what" << endl;//如果是第一位开始的则find函数返回值为0输入相应的结果
}
else//否则此字串不是目标字串
{
cout << "unknown command" << endl;//输出未查询到
}
}
else//判断输入的字串数量不为1,为第二种情况,采用数组处理
{
int l = str.find(' ');//定义一个整数l记录find函数返回的空格所在位置的字符串str的下标
int count = 0;//定义一个整数记录匹配对数是否是唯一的
string str1 = str.substr(0, l);//定义第一个字串为str1采用substr函数分割复制字符串
string str2 = str.substr(l + 1, str.size() - l - 1);//定义第二个字串为str2采用substr函数分割复制字符串
for (int i = 0; i < 5; i++)//遍历两个字串在数组dp中的存在情况
{
if (dp[i][0].find(str1) == 0 && dp[i][1].find(str2) == 0)//如果字串1和字串2都在数组dp的某个位置存在则
{
res = dp[i][2];//将匹配到的数组的第三位赋值给要输出的字符串res
count++;//记录匹配次数是否为1次,大于一次则输出查询不到
}
}
if (count == 1)//判断匹配次数是否为1次,大于一次则输出查询不到
{
cout << res << endl;//输出结果
}
else
{
cout << "unknown command" << endl;//输出无法查询到结果
}
}
}
return 0;//函数结束
}

