先说一下这道题吧,没有那么难,纯逻辑扣细节!
自己犯的错误:
1.读题问题还是有点
2.对题目的判断出现偏差
3.口头debug还是需要一步一步来,别空想
接下来写一下写题思路:
1.记住前两个字符串的第一个相同的大写字母在字母表中的位置。
例如:A——MON D——THU
注意:这个大写字母的范围判断时不能写A~Z而是A~G
因为你需要的只能是这几天,没有星期八星期九
2.记住前两个字符串的第二个相同的字符(0~9 A~N)
两种判断 是数字,该如何做
是字母,该如何做
3.记住后两个字符串的第一个相同的英文字母的下标,大小写都算(第一次提交错了这个)
就是这些,下面是AC代码,以供大家参考,谢谢!
#include<iostream>
#include<cstring>
using namespace std;
int main(){
char s1[100];
char s2[100];
char s3[100];
char s4[100];
cin>>s1>>s2>>s3>>s4;
int day;//星期 switch
int count=0;
int hour;//时间
int Indexj;//分钟
for(int i=0;s1[i]&&s2[i];i++){
if(((s1[i]>='A'&&s1[i]<='G')&&(s1[i]==s2[i]))&&count==0){
day=s1[i]-'A'+1;
count++;
}
else{
if(((s1[i]>='A'&&s1[i]<='N')&&(s1[i]==s2[i]))&&count==1){
hour=10-'A'+s1[i];
break;
}
else if(((s1[i]>='0'&&s1[i]<='9')&&(s1[i]==s2[i]))&&count==1){
hour=s1[i]-'0';
break;
}
}
}
for(int i=0;s3[i]&&s4[i];i++){
if(((s3[i]>='a'&&s3[i]<='z')||(s3[i]>='A'&&s3[i]<='Z'))&&(s3[i]==s4[i])){
Indexj=i;
break;
}
}
char DAY[5];
switch(day){
case 1:strcpy(DAY,"MON");break;
case 2:strcpy(DAY,"TUE");break;
case 3:strcpy(DAY,"WED");break;
case 4:strcpy(DAY,"THU");break;
case 5:strcpy(DAY,"FRI");break;
case 6:strcpy(DAY,"SAT");break;
case 7:strcpy(DAY,"SUN");break;
}
printf("%s %02d:%02d",DAY,hour,Indexj);
}