题解 | #配置文件恢复#
配置文件恢复
https://www.nowcoder.com/practice/ca6ac6ef9538419abf6f883f7d6f6ee5
//先判断几个关键字,在判断首字母是r还是b,再分别利用strncmp判断
//这个题目的输入用例也许有疑问,利用while(gets(arr)!=EOF)进行输入会造成死循环
#include <stdio.h>
#include<string.h>
int Isres(char arr[20])
{
int sz = strlen(arr);
char p[5] = "reset";
return !strncmp(arr, p, sz);
}
int Isresb(char arr[20], int k)
{
int sz = strlen(arr);
char p[5] = "reset", q[5] = "board";
return !(strncmp(arr, p, k) || strncmp(arr + k + 1, q, sz - k - 1));
}
int Isrebb(char arr[20], int k)
{
int sz = strlen(arr);
char p[6] = "reboot", q[9] = "backplane";
return !(strncmp(arr, p, k) || strncmp(arr + k + 1, q, sz - k - 1));
}
int Isboa(char arr[20], int k)
{
int sz = strlen(arr);
char p[5] = "board", q[3] = "add";
return !((strncmp(arr, p, k) || strncmp(arr + k + 1, q, sz - k - 1)));
}
int Isbd(char arr[20], int k)
{
int sz = strlen(arr);
char p[5] = "board", q[6] = "delete";
return !(strncmp(arr, p, k) || strncmp(arr + k + 1, q, sz - k - 1));
}
int Isbaa(char arr[20], int k)
{
int sz = strlen(arr);
char p[9] = "backplane", q[5] = "abort";
return !(strncmp(arr, p, k) || strncmp(arr + k + 1, q, sz - k - 1));
}
int main()
{
char arr[800][20];
int j=0,i = 0, sz = 0, flag = 0, k = 0, r = 0, resb, rebb, bd, boa, baa;
for(j=0;j<800;j++)
{
gets(arr[j]);
sz = strlen(arr[j]);
if(sz==0)
{
break;
}
flag = 0;
for (i = 0; i < sz; i++)
{
if (arr[j][i] == ' ')
{
flag = 1;
k = i;
break;
}
}
if (arr[j][0] == 'r')
{
if (!flag)
{
if (Isres(arr[j]))
{
printf("reset what\n");
continue;
}
else
{
printf("unknown command\n");
continue;
}
}
else
{
if (Isresb(arr[j], k) && Isrebb(arr[j], k))
{
printf("unknown command\n");
continue;
}
if (!(Isresb(arr[j], k) || Isrebb(arr[j], k)))
{
printf("unknown command\n");
continue;
}
if (Isresb(arr[j], k))
{
printf("board fault\n");
continue;
}
if (Isrebb(arr[j], k))
{
printf("impossible\n");
continue;
}
}
}
else
{
if (Isbd(arr[j], k))
{
printf("no board at all\n");
continue;
}
if (Isboa(arr[j], k) && Isbaa(arr[j], k))
{
printf("unknown command\n");
continue;
}
if (!(Isboa(arr[j], k) || Isbaa(arr[j], k)))
{
printf("unknown command\n");
continue;
}
if (Isboa(arr[j], k))
{
printf("where to add\n");
continue;
}
if (Isbaa(arr[j], k))
{
printf("install first\n");
continue;
}
}
}
return 0;
}
