題目
這個題要注意的細節很多。因爲一個星期有七天,一天有24小時,所以要注意字母範圍這個隱藏條件,不符合條件的字母要跳過。
還要注意:第二次查找,要接着第一次找到的位置開始找。這個有點坑,題目裏沒說明白,只說是第二個相同的字符,我一開始是從頭找的,所以這個點卡了很久。
所以,做題還是要先讀懂題再開始敲,不然的話,用錯誤的理解敲出來再一點一點改太浪費時間了。
自己用的測試用例,用於測試第二次查找的開始要接着第一次的結束位置繼續找
這個坑
s99ssssssssccccAE432543
s99ssssssssccccAE123123
s&hgifdknn
d&Hyscvnmnm
答案:MON 14:09
題解 C++
#include<iostream>
#include<string>
using namespace std;
//這個題要注意的細節很多。因爲一個星期有七天,一天有24小時,所以要注意字母範圍這個隱藏條件,不符合條件的字母要跳過。
int main() {
string str1, str2, str3, str4;
cin >> str1 >> str2 >> str3 >> str4;
int weekday = -1;
int hour = -1;
//在前兩個字符串中,找第一個相同的大寫字母(由於一週七天的約束,應該在A-G範圍內)
int temp = -1;
int len = str1.length() < str2.length() ? str1.length() : str2.length();
for (int i = 0; i < len; i++) {
if (str1[i] == str2[i] && str1[i] >= 'A'&&str1[i] <= 'G') {
weekday = str1[i] - 'A';
temp = i;
break;
}
}
//接着上次找到的位置繼續找,找到第一個相同的數字(0-9)或大寫字母(A-N)
for (int i = temp + 1; i < len; i++) {
if (str1[i] == str2[i]) {
if (str1[i] >= '0'&&str1[i] <= '9') {//是數字
hour = str1[i] - '0';
break;
}
else if (str1[i] >= 'A'&&str1[i] <= 'N') {//是大寫字母
hour = 10 + (str1[i] - 'A');
break;
}
}
}
//後兩個字符串中,找到第一個相同字母的位置
int minute = -1;
len = str3.length() < str4.length() ? str3.length() : str4.length();
for (int i = 0; i < len; i++) {
if (str3[i] == str4[i]) {
if ((str3[i] >= 'A'&&str3[i] <= 'Z') || (str3[i] >= 'a'&&str3[i] <= 'z')) {
minute = i;
break;
}
}
}
string weekdays[] = { "MON","TUE","WED","THU","FRI","SAT","SUN" };
cout << weekdays[weekday] << " ";
printf("%02d:%02d", hour, minute);
system("pause");
}