疑惑:
不是很理解题目里的这一段描述,一开始理解成第一对【大写英文字母】和第二对【字符】查找的顺序是各自独立的,以为第二对相同的字符也要从头开始找,卡了半天。看了别人的题解才知道第二个相同的字符要从第一个【大写英文字母】之后开始找
前面两字符串中第 1 对相同的大写英文字母(大小写有区分)是第 4 个字母 D,代表星期四;第 2 对相同的字符是 E ,那是第 5 个英文字母,代表一天里的第 14 个钟头(于是一天的 0 点到 23 点由数字 0 到 9、以及大写字母 A 到 N 表示)
#include <iostream>
#include <map>
using namespace std;
int main(){
int index = 0;
int arr[2] = {0};
string day,dh1,dh2,m1,m2;
map<int,string> map = {{1,"MON"},{2,"TUE"},{3,"WED"},{4,"THU"},{5,"FRI"},{6,"SAT"},{7,"SUN"}};
cin >> dh1 >> dh2 >> m1 >> m2;
//星期
int length = dh1.length() < dh2.length() ? dh1.length() : dh2.length();
for (int i = 0; i < length; i++) {
if(dh1[i] == dh2[i] && (dh1[i] >= 'A'&& dh1[i] <= 'G') ){
arr[0] = dh1[i] - 'A' + 1;
index = i;
break;
}
}
//时
for (int i = index + 1; i < length; i++) {
if (dh1[i] == dh2[i] && ( (dh1[i] >= 'A' && dh1[i] <= 'N') || isdigit(dh1[i])) ) {
if (isdigit(dh1[i])) {
arr[1] = dh1[i] - '0';
break;
}else {
arr[1] = dh1[i] - 'A' + 10;
break;
}
}
}
//分
length = m1.length() < m2.length() ? m1.length() : m2.length();
for (int i = 0; i < length; i++) {
if (m1[i] == m2[i] && isalpha(m1[i]) ) {
index = i;
break;
}
}
//输出
cout << map[arr[0]] << " ";
printf("%02d:%02d",arr[1],index);
return 0;
}