审题,利用范例来验证
思路理好了在写
#include <stdio.h>
#include <string.h>
#if 0
#define dbg printf
#else
#define dbg
#endif
char *cmd[6] = {"reset", "reset board", "board add", "board delete", "reboot backplane", "backplane abort"};
void execu(int index)
{
switch (index)
{
case 0:
printf("reset what\n");
break;
case 1:
printf("board fault\n");
break;
case 2:
printf("where to add\n");
break;
case 3:
printf("no board at all\n");
break;
case 4:
printf("impossible\n");
break;
case 5:
printf("install first\n");
break;
default:
printf("unknown command\n");
break;
}
}
int get_word_cnt(char *wd)
{
int i;
int cnt = 1;
for(i=0; i<strlen(wd); i++)
{
if(wd[i] == ' ')
{
cnt++;
}
}
return cnt;
}
void two_wd_split(char *wd, char *first, char *second)
{
int i = 0;
while(wd[i] != ' ')
{
i++;
}
strncpy(first, wd, i);
strcpy(second, wd+i+1);
dbg("(%d):first=(%s), second=(%s)\n", __LINE__, first, second);
}
int one_wd(char *a, char *b)
{
int i;
if(strlen(a) < strlen(b))
{
return 0;
}
for(i=0; i<strlen(b); i++)
{
if(a[i] != b[i])
{
return 0;
}
}
return 1;
}
int one_wd_pair(char *in)
{
char f[32] = {0};
char s[32] = {0};
int i;
for(i=0; i<(sizeof(cmd)/sizeof(char *)); i++)
{
if(get_word_cnt(cmd[i])==1 && one_wd(cmd[i], in)==1)
{
return i;
}
}
return 0;
}
int two_wd_pair(char *in)
{
int i, j;
int cnt = 0;
char first[32] = {0};
char second[32] = {0};
char f[32] = {0};
char s[32] = {0};
two_wd_split(in, first, second);
for(i=0; i<(sizeof(cmd)/sizeof(char *)); i++)
{
if(get_word_cnt(cmd[i]) == 2)
{
memset(f, 0, sizeof(f));
memset(s, 0, sizeof(s));
two_wd_split(cmd[i], f, s);
if(one_wd(f, first)==1 && one_wd(s, second)==1)
{
cnt++;
j = i;
}
}
}
if(cnt == 1)
{
return j;
}
else
{
return 6;
}
}
int main(void)
{
char in[1024][32] = {0};
int out[1024] = {0};
char p;
int i, j;
int cnt;
i = 0;
j = 0;
while(scanf("%c", &p) != EOF)
{
if(p == '\n')
{
dbg("(%d):in[%d]=(%s)\n", __LINE__, i, in[i]);
i++;
j = 0;
}
else
{
in[i][j] = p;
j++;
}
}
dbg("(%d):i=%d\n", __LINE__, i);
for(j=0; j<i&&strlen(in[j])>0; j++)
{
dbg("(%d):in[%d]=(%s)\n", __LINE__, j, in[j]);
}
for(j=0; j<i&&strlen(in[j])>0; j++)
{
cnt = get_word_cnt(in[j]);
if(cnt >= 3)
{
dbg("(%d):\n", __LINE__);
out[j] = 6;
}
else if(cnt == 2)
{
dbg("(%d):\n", __LINE__);
out[j] = two_wd_pair(in[j]);
}
else
{
dbg("(%d):\n", __LINE__);
out[j] = one_wd_pair(in[j]);
}
}
for(j=0; j<i&&strlen(in[j])>0; j++)
{
execu(out[j]);
}
return 0;
}