感觉直接字符匹配就可以了。
#include<stdio.h>
#include<string.h>
char area(char a, char b)
{
char c;
switch(a)
{
case '3':
if(b == '3') c = 'Z';
if(b == '1') c = 'S';
break;
case '8':
if(b == '1') c = 'H';
if(b == '2') c = 'M';
break;
case '1':
if(b == '1') c = 'B';
break;
case '2':
if(b == '1') c = 'L';
break;
case '7':
if(b == '1') c = 'T';
break;
case '5':
if(b == '4') c = 'I';
break;
default: break;
}
return c;
}
int main()
{
char a[18];
char *s;
int N;
while(scanf("%d", &N)!=EOF)
{
while(N--)
{
scanf("%s", a);
switch(area(a[0], a[1]))
{
case 'Z':
s = "Zhejiang";
break;
case 'B':
s = "Beijing";
break;
case 'T':
s = "Taiwan";
break;
case 'H':
s = "Hong Kong";
break;
case 'M':
s = "Macao";
break;
case 'I':
s = "Tibet";
break;
case 'L':
s = "Liaoning";
break;
case 'S':
s = "Shanghai";
break;
default: break;
}
printf("He/She is from %s,and his/her birthday is on %c%c,%c%c,%c%c%c%c based on the table.\n", s, a[10], a[11], a[12], a[13], a[6], a[7], a[8], a[9]);
}
}
return 0;
}