前言
正文
思路
这里一定要注意在确定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;
}