前言

传送门

正文


思路

这里一定要注意在确定DAY和HH的时候一定要限定完整,即分别是A~G和A~N,否则会报错,除此之外,记得break!!!,最后其实不一定要判断len0,len1,len2,len3的大小,可以在循环条件里直接写成i<len0&&i<len1即可

参考题解

#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
/*
题意输出DAY HH:MM的格式,
DAY:表示星期几的三个字符的缩写。
转换关系:大写字母A表示周一 ,前两个字符串中,第一对位置相同的同一大写字母(A~G) ,假设是D,那么就表示是周四,因此DAY为THU 
HH:在确认DAY后,对前两个字符串继续往后面检索,得到的第一对位置相同的同一字符(注意范围是0~9以及A~N,因为只有一天只有24个小时),假设是E 
转换关系:24个小时由0~9以及A~N映射 ,因此字母E表示14 
MM:后两个字符串中第一对位置相同的A~Z或a~z的字母,记其位置为i(下标从0开始) 
转换关系:	若i为4,则表示MM为4 
*/
int main(){
	string str[4];
	for(int i=0;i<4;i++){
		cin>>str[i];
	}
	string day[7]={"MON","TUE","WED","THU","FRI","SAT","SUN"};
	int len0=str[0].size(),len1=str[1].size(),len2=str[2].size(),len3=str[3].size();
	if(len1<len0)len0=len1;
	int i;
	for(i=0;i<len0;i++){
		//第一对位置相同的同一大写字母,确认DAY ,一定注意是(A~G),一周只有七天,下面的小时同理 
		if(str[0][i]==str[1][i]&&(str[0][i]>='A'&&str[0][i]<='G')){
			cout<<day[str[0][i]-'A']<<" ";
			break;
		}
	}
	//这里注意i++ 
	for(i++;i<len0;i++){
		//确认HH
		if(str[0][i]==str[1][i]){
			if(str[0][i]>='A'&&str[0][i]<='N'){
				printf("%02d:",str[0][i]-'A'+10);//A~N
				break;
			}
			else if(str[0][i]>='0'&&str[0][i]<='9'){
				printf("%02d:",str[0][i]-'0');//0~9
				break;
			}
		}
	}
	if(len3<len2)len2=len3;
	for(int j=0;j<len2;j++){
		if(str[2][j]==str[3][j]){
			if(str[2][j]>='a'&&str[2][j]<='z'||str[2][j]>='A'&&str[2][j]<='Z'){
				printf("%02d\n",j);
				break;
			} 
		}
	}
	return 0;
}