C++福尔摩斯的约会
这道题的要求总结如下:
1.DAY 星期 大写字母:A B C D E F G
2.HH 时 数字+大写字母 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N
3.MM 分 相同位置英文字母即可
要注意一点:HH和MM是个位数时格式是0x
1 #include2 #include <string> 3 #include "stdio.h" 4 5 using namespace std; 6 7 int main() 8 { 9 string str1,str2,str3,str4; 10 cin >> str1 >> str2 >> str3 >> str4; 11 string day[7] = {"MON ","TUE ","WED ", "THU ","FRI ","SAT ","SUN "}; 12 //后两个字符串中相同的字母的索引位置 13 int index = 0; 14 //得到两个数组中最短的那个的长度 15 int length1 = str1.length() < str2.length()?str1.length():str2.length(); 16 int length2 = str3.length() < str4.length()?str3.length():str4.length(); 17 18 bool flag1 = false,flag2 = false; 19 for(int i = 0;i < length1;++i) 20 { 21 //获取DAY 22 if(str1[i] == str2[i]) 23 { 24 if(!flag1&& str1[i] >= 'A' &&str1[i] <= 'G') 25 { 26 int j = str1[i]-'A'; 27 cout << day[j]; 28 flag1 = true; 29 i++; 30 } 31 if(flag1 && !flag2) 32 { 33 if((str1[i] >= '0' &&str1[i] <= '9')||(str1[i] >= 'A' &&str1[i] <= 'N')) 34 { 35 int hour; 36 if(str1[i] >= '0' && str1[i] <='9') 37 { 38 hour = str1[i]-'0'; 39 }else if(str1[i] >= 'A' && str1[i] <='N') 40 { 41 hour = str1[i]-'A'+10; 42 } 43 printf("%02d:",hour); 44 //cout << "HH是:" << HH < 45 flag2 = true; 46 } 47 } 48 } 49 if(flag1&&flag2)//DAY和HH都有值了 50 break; 51 } 52 53 for(int i = 0;i < length2;++i) 54 { 55 if(str3[i] == str4[i]) 56 { 57 if((str3[i]>='a' && str3[i] <= 'z')||(str3[i]>='A' && str3[i] <= 'Z')) 58 { 59 index = i; 60 //cout << "MM是:" << index < 61 printf("%02d",index); 62 break; 63 } 64 } 65 } 66 return 0; 67 }
我这段代码里面有很多可以改进的地方,判断字母的可以用函数