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

来源:互联网 发布:早起打卡软件 编辑:程序博客网 时间:2024/05/17 07:21

链接: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对相同且为英文字母的字符对时,
其位置,当前字符的数组下标,即为第几分钟

分析

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

代码

#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;}

小结

非常简单的匹配问题。