PAT-B] 1014. 福尔摩斯的约会 [字符串处理]

链接:1014. 福尔摩斯的约会 (20)

题意

让大家来扮演福尔摩斯,又让大家获得约会的机会。
不得不说这个题的福利很好啊(大雾)。

题目的话是给四行字符串
然后先对前两行字符串中的字符依次进行匹配。
当遇到第1对相同且满足以下条件的字符对时,则表示为星期几

  1. 大写字母
  2. 既然是表示星期几,取值范围则为 $( A, A + 7 )$,即 $( A, G )$

然后从当前位置开始继续往后再对前两行字符串进行匹配操作。
当遇到第2对相同且满足以下条件的字符对时,则表示为第几小时

  1. 大写字母和数字
  2. 取值范围则为 $( 0, 9 )$,表示 $0$点 到 $9$点
    和 $( A, A + 13 )$,即 $( A, N )$,表示 $10$点 到 $23$点

最后则对后两行字符串中的字符依次进行匹配。
当遇到第1对相同且为英文字母的字符对时,
其位置,当前字符的数组下标,即为第几分钟

分析

题意中已经详细分析了。
注意一下输出时的格式就没问题了。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <cstdio>
char a[65], b[65], c[65], d[65];
char *week[] = { "MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN" };
int main()
{
while( ~scanf( "%s%s%s%s", a, b, c, d ) ){
int f = 1; // f 表示现在找的是第几个相同的字符 1 为第一个 0 为第二个
for( int i = 0; a[i] != '\0' && b[i] != '\0'; i++ ){
if( a[i] == b[i] ){
if( f ){
if( a[i] >= 'A' && a[i] <= 'G' ){
printf( "%s ", week[a[i] - 'A'] );
f = 0;
}
}
else{
if( ( a[i] >= 'A' && a[i] <= 'N' ) || ( a[i] >= '0' && a[i] <= '9' ) ){
int num;
if( a[i] >= '0' && a[i] <= '9' ){
num = a[i] - '0';
putchar( '0' );
}
else num = a[i] - 'A' + 10;
printf( "%d:", num );
break;
}
}
}
}
for( int i = 0; c[i] != '\0' && d[i] != '\0'; i++ ){
if( c[i] == d[i] ){
if( ( c[i] >= 'A' && c[i] <= 'Z' ) || ( c[i] >= 'a' && c[i] <= 'z' ) ){
printf( "%02d\n", i );
break;
}
}
}
}
return 0;
}

小结

非常简单的匹配问题。