有人找福尔摩斯约会,给了一堆字符串,福尔摩斯太牛逼了,就从字符串里把约会时间decode出来了。
解码规则:
- 对于前两个字符串s1,s2,取第一个相同位置的相同大写字母代表星期几,例如“D”代表星期四。
- 在星期几确定之后,下一个相同位置的相同数字或者A——N字母表示0~23h内的小时。
- 对于后两个字符串,取第一个相同位置的相同英文字母代表分钟
根据条件,扫描字符串判断即可。
#include <bits/stdc++.h>
using namespace std;
string d[8] = {"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"};
bool captital(char c)
{
if ('A' <= c && c <= 'Z')
return true;
return false;
}
bool letter(char c)
{
if ('A' <= c && c <= 'Z')
return true;
if ('a' <= c && c <= 'z')
return true;
return false;
}
int main()
{
int day = 0, hour = 0, minute = 0;
bool flag1 = false, flag2 = false, flag3 = false;
string s1, s2, s3, s4;
cin >> s1 >> s2 >> s3 >> s4;
int minlen = min(s1.size(), s2.size());
for (int i = 0; i < minlen; i++)
{
char c1 = s1[i], c2 = s2[i];
if (c1 == c2)
if (captital(c1))
{
if (!flag1 && c1 <= 'G')
{
day = c1 - 'A';
flag1 = true;
}
else if (!flag2 && c1 <= 'N')
{
hour = c1 - 'A' + 10;
flag2 = true;
}
}
else if ('0' <= c1 && c1 <= '9')
if (!flag2 && flag1)
{
hour = c1 - '0';
flag2 = true;
}
if (flag1 && flag2)
break;
}
minlen = min(s3.size(), s4.size());
for (int i = 0; i < minlen; i++)
if (s3[i] == s4[i] && letter(s3[i]))
{
minute = i;
break;
}
printf("%s %02d:%02d\n", d[day].c_str(), hour, minute);
// system("pause");
return 0;
}
注意:
- 星期只能一到七,小时只能0到23,要做出限定
- 在“首次相同”的判定中,要注意优先级,即如果星期几没有确定,即使满足小时的条件,也不能给小时赋值。