题目
传送门:
华生的密码
代码
就是一道简单的字符串处理问题,但是题目说的很不明白,很不具体。
控制条件非常多而且长,这种题是竞赛中最烦的,考验手速和细致。
#include <cstdio>
#include <string.h>
#include <cstdlib>
using namespace std;
int main()
{
int flag=1,hour,minute,i,day;
char s1[60],s2[60],t1[60],t2[60];
scanf("%s %s %s %s",s1,s2,t1,t2);
// gets(s1);
// gets(s2);
// gets(t1);
// gets(t2);
//get DAY
for(i=0;i<strlen(s1);i++){
if((s1[i]==s2[i])&&(s1[i]>='A'&&s1[i]<='G')&&flag){
if(s1[i]>='A'&&s1[i]<='G')
day=s1[i]-'A'+1;
// else if(s1[i]>='a'&&s1[i]<='g')
// day=s1[i]-'a'+1;
flag=0;
continue;
}
//get hour
if(flag==0)
if((s1[i]==s2[i])&&((s1[i]>='0'&&s1[i]<='9')||
(s1[i]>='A'&&s1[i]<='N'))){
if(s1[i]>='0'&&s1[i]<='9')
hour=s1[i]-'0';//0~9
else hour=s1[i]-'A'+10;//10~23
//printf("s[i]=%c\n",s1[i]);
break;
}
}
//get minute
for(i=0;i<strlen(t1);i++){
if((t1[i]==t2[i])&&((t1[i]>='a'&&t1[i]<='z')||(t1[i]>='A'&&t1[i]<='Z'))){
minute=i;
//printf("%c\n",t1[i]);
break;
}
}
//output
switch(day){
case 1:printf("MON ");break;
case 2:printf("TUE ");break;
case 3:printf("WED ");break;
case 4:printf("THU ");break;
case 5:printf("FRI ");break;
case 6:printf("SAT ");break;
case 7:printf("SUN ");break;
}
printf("%02d:%02d",hour,minute);
return 0;
}
需要注意的小坑:哪个条件里可以有小写,哪个只能大写
强调一点
论continue的重要性:
题目在字符串中从前到后找两个一样的字符,所以循环中第一个if用flag控制,另外用continue确保不会在第一个字符同时进入两个循环(而是依次)