[pat B級]ホームズのデート

2910 ワード

【タイトル説明】大探偵ホームズに「デートしよう!3485 djDkxh 4 hhGE 2984 akDfkkggEdsb s&hgsfdk d&Hyscvnm」という奇妙な文字が届いた.大探偵はとても
わかりました.メモの変な文字化けしは実はデートの時間「木曜日14:04」です.前の2つの文字列の1対目の同じ大文字と英語のアルファベット(大文字と小文字が区別されている)は
4番目のアルファベット「D」は木曜日を表します.2番目の同じ文字は「E」で、それは5番目の英語のアルファベットで、1日の14時間目を表しています(そこで1日の0時から23時まで数字の0から9、
および大文字AからNで表される);後ろの2つの文字列の1対目の同じ英字's'は、4分目を表す4番目の位置(0からカウント)に表示されます.2対の文字列が与えられ、
ホームズがデートの時間を復号するのを助けてください.
【タイトルリンク】https://www.nowcoder.com/pat/6/problem/4040
【分析】この問題はいろいろな細部に注意しなければならない.アルファベットが等しいかどうかを判断するだけでなく、問題が与えた条件を満たすかどうかを判断する必要がある.例えば、最初の等しいアルファベットは大文字のAからZしかなく、2番目の等しいアルファベットは0~9とA~Zである.3番目の等しいアルファベットはa~zとA~Zです.もう1つの隠れた条件は、最初の2つの等しいアルファベットが1番目の文字列で探し、最後に等しいアルファベットが2番目の文字列で探すことです.整数型を文字列型に変換するには、to_を使用します.string()またはitoa()関数.文字列型を整数型に変換するにはatoi()関数を使用します.
【コード】
#include 
#include 
#include 
using namespace std;
//           ,   “DAY HH:MM”,  “DAY”     3    , MON     ,TUE     ,WED     ,THU     ,FRI     ,SAT     ,SUN     。               。
string day[7] = {"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"};
bool judge(char x1, char x2, int &k, string &time, int i)
{
    if (x1 == x2)
    {
        if (k == 1 && x1>='A' && x1<='Z')
        {
            int num = x1 - 'A';
            time = day[num];
            return true;
        }

        if (k == 2 && ((x1>='0' && x1<='9')||(x1>='A' && x1<='Z')))
        {
            if (x1 >= '0' && x1 <= '9')
                time = time + " 0" + x1 + ":";
            else
            {
                int hour = x1 - 'A' + 10;
                //  string hh="";
                //  itoa(hour,hh,10); itoa    ,   atoi          , itoa          ,atoi          
                time = time + " " + to_string(hour) + ":"; //  to_string int   string
            }
            return true;
        }

        if (k == 3 && ((x1>='a' && x1<='z')||(x1>='A' && x1<='Z')))
        {
            if (i > 9)
                time = time + to_string(i);
            else
                time = time + "0" + to_string(i);
           return true;
        }
    }
    return false;
}

int main()
{
    string a, b, c, d;
    cin >> a >> b >> c >> d;
    string time = "";
    int k = 1; //           
    for (int i = 0; i < a.length(); i++)
    {
        if(judge(a[i], b[i], k, time, i))
        k++;
        if(k==3)
        break;
    }
    for (int j = 0; j < c.length(); j++)
    {
        if(judge(c[j], d[j], k, time, j))
        k++;
    }
    cout<