题目粗心:

给出4个字符串,其中前两个字符串蕴含两个信息:DAY和HH,后两个蕴含一个信息:MM。
上面给出这个信息的辨认信息和转换关系:
DAY:前两个字符串的第一对雷同地位的A~G的大写字母。
转换关系: 大写字母是从A开始的第几个,就是星期几。
HH:寻找信息DAY的地位之后的第一对雷同地位的0~9或A-N的字符。
转换关系: 0-9对应0-9,A-N对应10-23。
MM:后两个字符串的第一对雷同地位的A-Z或a~z的英文字母。
转换关系: 该字符所在的地位(从0开始)。
最初按DAY HH:MM的格局输入。

算法思路:

首先为了不便输入,应用capitalLetterToWeek建设大写字母到星期的映射,hours建设0~9和A~N到0~23的映射,其初始化的办法见如下init(),而后应用s1,s2,s3,s4承受4个字符串,应用found_capital记录是否曾经找到了大写字母,在s1和s2找到雷同的字符时,首先判断found_capital是否为true,如果不是则判断以后的字符是否是大写字母A到G,如果是则输入该字符对应的星期capitalLetterToWeek[s1[j]],如果found_capital为true,则判断以后字符是否是数字0~9或者A~N,如果是则输入该字符对应的小时hours[s1[j]],最初遍历s3和s4,只有找到第一个相等的字母,输入其地位即可。

初始化:
unordered_map<char,string> capitalLetterToWeek;//大写字母到星期的映射unordered_map<char,int> hours;// 0~9和A~N到0~23的映射void init(){    capitalLetterToWeek['A'] = "MON";    capitalLetterToWeek['B'] = "TUE";    capitalLetterToWeek['C'] = "WED";    capitalLetterToWeek['D'] = "THU";    capitalLetterToWeek['E'] = "FRI";    capitalLetterToWeek['F'] = "SAT";    capitalLetterToWeek['G'] = "SUN";    for (int k = 0; k < 24; ++k) {        if(k<10){            hours['0'+k] = k;        } else{            hours['A'+k-10] = k;        }    }}
留神点:
1、代表星期的大写字母为A到G,代表小时的大写字母为A到N,代表分钟的字符是英文字母。2、小时和分钟的格局都得保留2位整数。
提交后果:

AC代码:
#include<cstdio>#include<string>#include <iostream>#include <unordered_map>using namespace std;unordered_map<char,string> capitalLetterToWeek;//大写字母到星期的映射unordered_map<char,int> hours;// 0~9和A~N到0~23的映射void init(){    capitalLetterToWeek['A'] = "MON";    capitalLetterToWeek['B'] = "TUE";    capitalLetterToWeek['C'] = "WED";    capitalLetterToWeek['D'] = "THU";    capitalLetterToWeek['E'] = "FRI";    capitalLetterToWeek['F'] = "SAT";    capitalLetterToWeek['G'] = "SUN";    for (int k = 0; k < 24; ++k) {        if(k<10){            hours['0'+k] = k;        } else{            hours['A'+k-10] = k;        }    }}// 判断代表星期的大写字母bool isCapitalInWeek(char c){    return c >= 'A' && c <= 'G';}// 判断代表小时的大写字母bool isLetterInHour(char c){    return (c >= 'A' && c <= 'N');}// 判断是否是字母bool isLetter(char c){    return (c >= 'A' && c <= 'Z')||(c >= 'a' && c <= 'z');}//判断是否是数字bool isNum(char c){    return (c>='0'&&c<='9');}int main(){    init();// 初始化    string s1,s2,s3,s4;    cin>>s1>>s2>>s3>>s4;    //首先取得s1和s2的大写字母和第二个雷同的字符    bool found_capital = false;// 记录是否曾经找到了大写字母    for (int j = 0; j < s1.size() && j < s2.size(); ++j) {        if(s1[j]==s2[j]){            if (found_capital){                // 曾经找到大写字母了,当初的字符代表工夫                if(isLetterInHour(s1[j])||isNum(s1[j])){                    printf("%02d:",hours[s1[j]]);                    break;                }            } else if(isCapitalInWeek(s1[j])){                printf("%s ",capitalLetterToWeek[s1[j]].c_str());                found_capital = true;            }        }    }    //而后取得s3和s4雷同字符的地位    for (int j = 0; j < s3.size() && j < s4.size(); ++j){        if(s3[j]==s4[j]&&isLetter(s3[j])){            printf("%02d",j);            break;        }    }    return 0;}