描述 |
注意:he he不是命令。 为了简化输入,方便用户,以“最短唯一匹配原则”匹配: 4、若输入两字串,则先匹配第一关键字,如果有匹配但不唯一,继续匹配第二关键字,如果唯一,匹配成功。例如输入:b a,无法确定是命令board add还是backplane abort,匹配失败。 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
知识点 | 字符串 | ||||||||||||||||
运行时间限制 | 0M | ||||||||||||||||
内存限制 | 0 | ||||||||||||||||
输入 | 多行字符串,每行字符串一条命令 | ||||||||||||||||
输出 | 执行结果,每条命令输出一行 | ||||||||||||||||
样例输入 | reset reset board board add board delet reboot backplane backplane abort | ||||||||||||||||
样例输出 | reset what board fault where to add no board at all impossible install first |
代码如下:
#include <iostream>
#include <vector>
using namespace std;
int num(const char a[]){
int i = 0,count = 1;
while(a[i] != '\0'){
if(a[i] == ' '){
count++;
}
i++;
}
return count;
}
bool isok(const char v1[],const char v2[]){
int i = 0,j = 0;
while(v2[j] != '\0'){
if(v1[i] == '\0')
return false;
if(v2[j] == ' '){
while(v1[i] != ' ')
i++;
i++;j++;
}
if(v2[j] == v1[i]){
i++;j++;
}else{
return false;
}
}
return true;
}
int main()
{
char mnue[6][25] = {"reset","reset board","board add","board delet","reboot backplane","backplane abort"};
char in[50][50];
int i = 0;
while(cin.getline(in[i],49,'\n') && in[i][0] != '\0'){
i++;
}
if(i == 0)
cout << "unkown command" <<endl;
for(int j = 0;j < i;j++){
if(num(in[j]) == 1){
if(isok(mnue[0],in[j]))
cout << "reset what" <<endl;
else
cout << "unkown command" <<endl;
}else if(num(in[j]) == 2){
if(isok(mnue[1],in[j]) && !isok(mnue[2],in[j]) && !isok(mnue[3],in[j]) && !isok(mnue[4],in[j]) && !isok(mnue[5],in[j]))
cout << "board fault" << endl;
else if(!isok(mnue[1],in[j]) && isok(mnue[2],in[j]) && !isok(mnue[3],in[j]) && !isok(mnue[4],in[j]) && !isok(mnue[5],in[j]))
cout << "where to add" << endl;
else if(!isok(mnue[1],in[j]) && !isok(mnue[2],in[j]) && isok(mnue[3],in[j]) && !isok(mnue[4],in[j]) && !isok(mnue[5],in[j]))
cout << "no board at all" << endl;
else if(!isok(mnue[1],in[j]) && !isok(mnue[2],in[j]) && !isok(mnue[3],in[j]) && isok(mnue[4],in[j]) && !isok(mnue[5],in[j]))
cout << "impossible" << endl;
else if(!isok(mnue[1],in[j]) && !isok(mnue[2],in[j]) && !isok(mnue[3],in[j]) && !isok(mnue[4],in[j]) && isok(mnue[5],in[j]))
cout << "install first" << endl;
else
cout << "unkown command" <<endl;
}
else{
cout << "unkown command" <<endl;
}
}
}