PAT甲级1061.

目录

A1061

题目

样例

输入:

3485djDkxh4hhGE 
2984akDfkkkkggEdsb 
s&hgsfdk 
d&Hyscvnm

输出:

THU 14:04

思路和坑点

  字符串处理,遍历一遍就行了。注意星期几的字母要求是大写的A-G,小时的字符是星期几之后遇到的共有的0~9,A-N(大写)范围的字符,分钟只要求相同字符的下标。
  可以使用isdigit();isupper()这样的函数简化判定。

AC代码

#include<bits/stdc++.h>
using namespace std;
int main(void){
#ifdef ONLINE_JUDGE
#else
    freopen("1.txt","r",stdin);
#endif
    string a,b,c,d;
    string day[7]={"MON","TUE","WED","THU","FRI","SAT","SUN"};
    cin>>a>>b>>c>>d;
    int i,t,h,m;
    for(i=0;i<a.size()&&i<b.size();i++){                //计算第几天 
        if(a[i]==b[i]&&a[i]>='A'&&a[i]<='G'){
            t=a[i]-'A'; break;
        }
    }
    for(i++;i<a.size()&&i<b.size();i++){                //计算第几小时 
        if(a[i]==b[i]){
            if(isdigit(a[i])){                            //如果是数字 
                h=a[i]-'0'; break;
            }
            else if(isupper(a[i])&&a[i]>='A'&&a[i]<='N'){//如果是A-N的字母 
                h=a[i]-'A'+10; break;
            }
            
        }
    }
    for(i=0;i<c.size()&&i<d.size();i++){                //计算分钟 
        if(c[i]==d[i]&&isalpha(c[i])){
            m=i; break;
        }
    }
    printf("%s %02d:%02d",day[t].c_str(),h,m);            //按照格式输出 
    return 0;
}