| 描述 |
有6条配置命令,它们执行的结果分别是:
注意: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>
#include<string.h>
#include<stdio.h>
using namespace std;
char execution[7][50] = {"reset what", "board fault", "where to add", "no board at all", "impossible", "install first", "unkown command"};
unsigned int num[7] = {1,2,2,2,2,2,0};
char command[6][2][50] = { {"reset", "xx"},
{"reset", "board"},
{"board", "add"},
{"board", "delet"},
{"reboot", "backplane"},
{"backplane", "abort"}
};
bool compare(vector<char*> &v, int idx)
{
//cout<<idx<<"idx"<<endl;
if(v.size()==num[idx])
{
for(int i=0; i<num[idx]; i++)
{
int sz = strlen(v[i]);
//cout<<v[i]<<"display"<<endl;
for(int j=0; j<sz; j++)
{
if(v[i][j] != command[idx][i][j])
{
//cout<<v[i][j]<<"_vs_"<<command[idx][i][j]<<endl;
return false;
}
}
}
return true;
}
else
{
//cout<<"size not compatible"<<endl;
return false;
}
}
void divide(char *buf)
{
vector<char *> v;
int last = 0;
int siz = strlen(buf);
for(int i=0; i<=siz; i++)
{
if(i==0)
{
}
else
{
if(buf[i]!=' ' && buf[i-1]==' ')
{
last = i;
}
if( (buf[i]==' ' || buf[i]==' ') && buf[i-1]!=' ')
{
char *tmp;
tmp = new char [50];
int count = 0;
for(int j=last; j<i; j++)
{
tmp[count] = buf[j];
count++;
}
tmp[count] = ' ';
v.push_back(tmp);
}
}
}
/*
for(int i=0; i<v.size(); i++)
{
cout<<v[i]<<'_';
}
cout<<endl;
*/
if(v.size() > 2)
{
cout<<execution[6]<<endl;//<<"xx";
return ;
}
else
{
int howmany=0;
int theone= 0;
for(int i=0; i<6; i++)
{
if( compare(v, i) )
{
howmany++;
theone = i;
}
else
{
}
}
if(howmany==1)
{
cout<<execution[theone]<<endl;
}
else
{
cout<<execution[6]<<endl;
}
return;
}
}
void solve(char *buf)
{
divide(buf);
}
bool allkong(char *buf)
{
for(int i=0; buf[i]!=' '; i++)
{
if(buf[i]!=' ')
return false;
}
return true;
}
int main()
{
char buf[100];
while( cin.getline(buf,100) )
{
if(strlen(buf)>0 )
solve(buf);
}
return 0;
}