#include <stdio.h>
#include <string.h>
typedef struct
{
char cmd[21];
char execute[21];
}cmd_execute;
int main()
{
int index = -1;
char cmd_str[21] = {0};
cmd_execute cmd_lib[6] = {
"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"
};
/* 标记命令库 每个位置是否被匹配 */
int size[6] = {0, 0, 0, 0, 0, 0};
while(gets(cmd_str) != NULL)
{
char *split = strtok(cmd_str, " ");
char* split1 = strtok(NULL, " ");
int flag = 0;
int index = 0;
memset(size, 0 , sizeof(int) * 6);
if(split != NULL)
{
int len = strlen(split);
int i;
for(i = 0; i < 6; i++)
{
flag = 1;
char* cmd_lib_split_1 = NULL;
char* cmd_lib_split_2 = NULL;
char tmp[21] = {0};
memcpy(tmp, cmd_lib[i].cmd, strlen(cmd_lib[i].cmd));
cmd_lib_split_1 = strtok(tmp, " ");
cmd_lib_split_2 = strtok(NULL, " ");
/* 第一关键字长度不匹配 命令不匹配*/
if(strlen(cmd_lib_split_1) < len)
{
flag = 0;
continue;
}
for(int j = 0; j < strlen(split); j++)
{
if(cmd_lib_split_1[j] != split[j])
{
flag = 0;
break;
}
}
// printf("cmd_lib_split_1 = %s, split = %s \n", cmd_lib_split_1, split);
// printf("cmd_lib_split_2 = %s, split1 = %s \n", cmd_lib_split_2, split1);
/* 命令字符 不对应,错误 */
if(!flag)
{
continue;
}
else
{
if((cmd_lib_split_2 == NULL && split1 != NULL)
|| (cmd_lib_split_2 != NULL && split1 == NULL) ) /* 第二关键字不匹配 */
{
continue;
}
else if((cmd_lib_split_2 == NULL && split1 == NULL)) /* 无第二关键字,此命令匹配成功,标记 */
{
size[i]++;
continue;
}
}
/* 第二关键字 字符长度不匹配 */
if(strlen(cmd_lib_split_2) < strlen(split1))
{
flag = 0;
continue;
}
for(int j = 0; j < strlen(split1); j++)
{
if(cmd_lib_split_2[j] != split1[j])
{
flag = 0;
continue;
}
}
/* 所有关键字均匹配 ,标记 */
if(flag)
{
size[i]++;
continue;
}
}
int num = 0;
/* 查询,匹配命令的个数 */
for(int i = 0; i < 6; i++)
{
if(size[i] == 1)
{
num++;
index = i;
}
}
/* 仅匹配成功一条命令的 输出 */
if(num == 1)
{
printf("%s\n", cmd_lib[index].execute);
}
else
{
printf("unknown command\n");
}
}
memset(cmd_str, 0, sizeof(char) * 20);
}
return 0;
}