题目
思路
如果不是题目描述地太模糊了,这题不难。
我翻译一下题目:
- 确定星期:前两个字符串中位置相同且字符相同的第一个大写字母,并且是[A-G]
- 确定小时:接星期的字符向后查找,位置相同的下一个相同的字符,并且是数字[0-9],或大写字母[A-N]
- 确定分钟:后两个字符串中位于相同位置且相同的第一个字母(不论大小写)
涉及到具体的代码,要用到ASCII码的知识,比较ASCII码,就能确定字符的范围了。
- 注意要点1:小时数如果不满两位数,要显示两位数,用%02d表示
- 注意要点2:指针字符串数组讲解
例如
这是一个指向数组的指针组,每个指针指向一个字符串(数组),DAYS[0]是字符串"MON"char* DAYS[]={"MON","TUS","WED","THU","FRI","SAT","SUN"};
代码
#include <stdio.h>
/*
确定星期:前两个字符串中位置相同且字符相同的第一个大写字母,并且应处于[A-G]
确定小时:接星期的字符向后查找,位置相同的下一个相同的字符,并且处于[0-9A-N]
确定分钟:后两个字符串中位于相同位置且相同的第一个字母
*/
int main()
{
char str1[61],str2[61],str3[61],str4[61];
scanf("%s %s %s %s",str1,str2,str3,str4);
int DAY;//用作计数,星期几-1
char* DAYS[]={"MON","TUE","WED","THU","FRI","SAT","SUN"};
//位置相同且字符相同,ASCII码介于'A'----'G',解密星期几
for(DAY = 0; str1[DAY] && str2[DAY]; DAY++)
{
//ASCII码介于'A'----'G'
if(str1[DAY] == str2[DAY] && str1[DAY] >= 'A' && str1[DAY] <= 'G')
{
printf("%s",DAYS[ str1[DAY] - 'A' ]);//ASCII码计算出正确的下标
break;
}
}
//下一对位置相同且字符相同,ASCII码介于0-9,A-N,解密小时数
int HH;
for(HH = DAY + 1; str1[HH] && str2[HH]; HH++)
{
if(str1[HH] == str2[HH])
{
if(str1[HH] >= '0' && str1[HH] <= '9')
{
//%02d是为了个位数也输出两位,例如01 05 09之类的,格式问题
printf(" %02d",str1[HH] - '0');//char型数组,里面的数字是ASCII码,要减'0'
break;//注意上面有个空格,格式问题
}
if(str1[HH] >= 'A' && str1[HH] <= 'N')
{
printf(" %02d",str1[HH] - 'A' + 10);//A从10开始的,所以减'A'+10
break;//注意上面有个空格,格式问题
}
}
}
//str34字符串中,位置相同,字符相同,且是字母,解密分钟数
int MM;
for(MM = 0; str3[MM] && str4[MM]; MM++)
{
if(str3[MM] == str4[MM] && str3[MM] >= 'A' && str3[MM] <= 'z')
{
printf(":%02d",MM);
break;//注意上面有个冒号,格式问题
}
}
return 0;
}