1014. 福尔摩斯的约会

输入 : 四个字符串

输出:DAY:HH:MM 这样的格式


思路:

    1. 求DAY 扫描前两串字符串,记录第一对相同位置的大写字母,求其与A的距离 来判断星期几

    星期一到星期天的话 从A-G扫描就够啦。扫出A-G以外的就对应错啦

    2. 求HH 继续往后找 相同位置的若是数字0-9则对应0-9,若是字母A-N,则对应10-23

    A-N同理

    3. 求MM 扫描后两个字符串,寻找相同位置的大小写字母 获取其位置。

注意:

    1. 二维数组的初始化列数设为5 (设3报错 不知道为啥)

    2. 注意这种时间的格式控制 %02d:

    3.注意转换小时的时候 满足是数字就跳出 满足是字母就跳出

#include <cstdio>
#include <cstring> 
int main(){


	char week [7][5]= {
		"MON","TUE","WED","THU","FRI","SAT","SUN"
		};
		char str1[70],str2[70],str3[70],str4[70];
		gets(str1);
		gets(str2);
		gets(str3);
		gets(str4);
		int len1=strlen(str1);
		int len2=strlen(str2);
		int len3=strlen(str3);
		int len4=strlen(str4);
		//别忘了声明i 
		int i;
		//还是得记长度 不然超过其中一个的长度 另一个没超过可能会报错 
	for(i=0;i<len1&&i<len2;i++){
		//如果相等的话,验证是否大写字母验证一个字符串就够了 
		if(str1[i]==str2[i]&&str1[i]>='A'&&str1[i]<='G'){
			//直接输出就好不用再存变量里啦
			printf("%s ",week[str1[i]-'A']);
			//注意这里输出的week对应的不是i 
		break;
		}
	}
	//在上面基础之后往后找,直接后自加,注意这种写法 
	for(i++;i<len1&&i<len2;i++){
	if(str1[i]==str2[i]){
		//!!!!!!!!!!!!!!!!!注意这里 满足一个就要break 
		if(str1[i]>='0'&&str1[i]<='9'){
			printf("%02d:",str1[i]-'0');
			break;
		}
		
		if(str1[i]>='A'&&str1[i]<='N'){
			printf("%02d:",10+str1[i]-'A');
		break;
	}
	
	} 
}
	
	for(int i=0;i<len3&&i<len4;i++){
		if(str3[i]==str4[i]){
			if((str3[i]>='A'&&str3[i]<='Z')||str3[i]>='a'&&str3[i]<='z'){
				printf("%02d",i);
				//注意这里是输出当前位置,格式控制
				break; 
			}
	}
	}
	return 0;
} 


猜你喜欢

转载自blog.csdn.net/pihe7623/article/details/79967824