思路:首先用一个二维字符数组Day存储星期几(注意,这里数组第二维大小不能等于3, 而要大于3,否则会编译错误)。先找出前两个字符串中第一个相同的大写字母,这里字母范围应该限定在A~G之间,而不是A~Z。对应到Day数组输出星期。然后,继续在前两个字符串中,找剩下的里面第一个相同的字符,数字也符合。不过要注意0~23输出的时候,要判断是否第一位有数,没有的话用0补充。再在后两个字符串中,找第一个相同的英文字母,大小写均可。输出时也要判断第一位是否有数,没有的话用0补充。

代码:

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int main(){
	char str1[100],str2[100],str3[100],str4[100];
	cin >> str1;
	cin >> str2;
	cin >> str3;
	cin >> str4;
	int n1 = min(strlen(str1),strlen(str2));
	int n2 = min(strlen(str3),strlen(str4));
	char Day[10][5] = {"MON","TUE","WED","THU","FRI","SAT","SUN"};
	int flag = 0;
	for(int i = 0;i < n1;i ++){
		if(str1[i] == str2[i] && str1[i] >= 'A' && str1[i] <= 'G'){  //一定要在A到G之间
			//cout << Day[str1[i] - 'A'];
			printf("%s",Day[str1[i] - 'A']);
			flag = i;
			break;
		}
	}
	cout << ' ';
	for(int i = flag+1;i < n1;i ++){
		if(str1[i] == str2[i]){
			if(str1[i] >= '0' && str1[i] <= '9'){  //0和9要加上''
				//printf("%02d",str1[i] - '0');
				cout << '0' << str1[i] - '0';  //最后要减去'0'
			    //cout << '0' << str1[i];  //这个是错的,有些样例过不去
				break;
			}
			else if(str1[i] >= 'A' && str1[i] <= 'N'){  //一定要在A到N之间
				//printf("%02d",str1[i] - 'A' + 10);
				cout << str1[i]-'A' + 10;  //最后要加上10
				//cout << '1' << str1[i]-'A';  //这个是错的,有些样例过不去
				break;
			}
		}
	}
	cout << ':';
	for(int i = 0;i < n2;i ++){
		if(str3[i] == str4[i]){
			if((str3[i] >= 'A' && str3[i] <= 'Z') || (str3[i] >= 'a' && str3[i] <= 'z')){
				if(i <= 9){
				    cout << '0' << i << endl;
				    break;
			    }
			    else{
				    cout << i << endl;
				    break;
			    }
			}
		}
	}
	return 0;
}

版权声明:本文为博主原创文章,如有错误,恳请大家在评论区指出,在下不胜感激~如要转载注明出处即可~