【来源】
【分析】
本题为字符串处理题。根据题意,比较前两个字符串可以得到星期和小时数,比较后面两个字符串可以得到分钟数。
需要注意以下几点:
- 理解题意要正确。比如题目中出现的“第2对相同的字符”在程序中不应当直接查找两个字符串中第二对相同的字符,而应当理解为“0-9”、“A-N”这些对解析有意义的字符。
- 输出时不足两位的小时、分钟要用0补足两位。
【源码】
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1, s2, s3, s4;
cin >> s1 >> s2 >> s3 >> s4;
char day = NULL;
char hour = NULL;
int flag = 0;
for (int i = 0; i < s1.length(); ++i){
if (i >= s2.length()){
break;
}
if (s1[i] == s2[i] && s1[i] >= 'A' && s1[i] <= 'G'
&& flag == 0){
day = s1[i];
flag = 1;
continue;
}
if (s1[i] == s2[i] && (s1[i] >= '0' && s1[i] <= '9'
|| s1[i] >= 'A' && s1[i] <= 'N')
&& flag == 1){
hour = s1[i];
break;
}
}
int minute = NULL;
for (int i = 0; i < s3.length(); ++i){
if (i >= s4.length()){
break;
}
if (s3[i] == s4[i] && (s3[i] >= 'a' && s3[i] <= 'z'
|| s3[i] >= 'A' && s3[i] <= 'Z')){
minute = i;
}
}
switch (day){
case 'A': cout << "MON "; break;
case 'B': cout << "TUE "; break;
case 'C': cout << "WED "; break;
case 'D': cout << "THU "; break;
case 'E': cout << "FRI "; break;
case 'F': cout << "SAT "; break;
case 'G': cout << "SUN "; break;
default: cout << "NON "; break;
}
if (hour >= '0' && hour <= '9'){
cout << "0" << hour << ":";
}
else if (hour >= 'A' && hour <= 'N'){
cout << 10 + hour - 'A' << ":";
}
if (minute < 10){
cout << "0" << minute;
}
else{
cout << minute;
}
return 0;
}
【点评】
这道题应该算是PAT考试中的“坑题”,一不小心就会把题意理解错误。不过也说明读题目时要快速融会贯通,不拘泥于字面意思。