1061 Dating (20 point(s))代码累赘呀,审题不清

1⃣️没必要用map,用hash,下标为x-‘A’即可
2⃣️这道题要求的是第一对在同一位置的字符,而我找的是第一对相同的满足条件的字符,两个字符串应该平行扫描

//小时:x-'A'+10
#include<bits/stdc++.h>
using namespace std;
map<char,string> m1;
int hash1[50];
void tofindC(string s1,string s2){
    int i=0,j=0,sign1=0,sign2=0;
    for(;i<s1.length();i++){
        while(s1[i]<'A'||s1[i]>'G')
            i++;
        for(;j<s2.length();j++){
            while(s2[j]<'A'||s2[j]>'G')
                j++;
            if(s1[i]==s2[j])
            {
                cout<<m1[s1[i]]<<" ";
                sign1=1;
                break;
            }
        }
        if(sign1==1)
            break;
    }
    i++;
    for(;i<s1.length();i++){
        while(s1[i]<'0'||s1[i]>'N')
            i++;
        for(;j<s2.length();j++){
            while(s2[j]<'0'||s2[j]>'N')
                j++;
            if(s1[i]==s2[j])
            {
                if(s1[i]<='9')
                    cout<<s1[i]<<":";
                else
                    cout<<(s1[i]-'A'+11)<<":";
                sign2=1;
                break;
            }
        }
        if(sign2==1)
            break;
    }
}
void tofindS(string s3,string s4){
    for(int i=0;i<s3.length();i++){
        while(!isalpha(s3[i]))
            i++;
        for(int j=0;j<s4.length();j++){
            while(!isalpha(s4[j]))
                j++;
            if(s3[i]==s4[j]){
                int m=max(i,j);
                printf("%02d\n",m);
                return;
            }
        }
    }
}
int main(){
    string s1,s2,s3,s4;
    m1['A']="MON";
    m1['B']="TUE";
    m1['C']="WED";
    m1['D']="THU";
    m1['E']="FRI";
    m1['F']="SAT";
    m1['G']="SUM";
    cin>>s1>>s2>>s3>>s4;
    tofindC(s1,s2);
    tofindS(s3,s4);
    return 0;
}

修改后

//小时:x-'A'+10
#include<bits/stdc++.h>
using namespace std;
string week[7] = {"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"};
int hash1[50];
void tofindC(string s1,string s2){
    int i=0;
    for(;i<s1.length()&&i<s2.length();i++){
         if(s1[i]==s2[i]&&s1[i]>='A'&&s1[i]<='G')
         {
             cout<<week[s1[i]-'A']<<" ";
             break;
         }
     }
     i++;  //否则下方查找无效,为第一对结果      
     for(;i<s1.length()&&i<s2.length();i++){
         if(s1[i]==s2[i]&&(s1[i]>='A'&&s1[i]<='N'||s1[i]>='0'&&s1[i]<='9'))
         {
             if(isalpha(s1[i]))
                 printf("%d:",s1[i]-'A'+10);
             else
                 printf("%02d:",s1[i]);
             return;
         }
     }
}
void tofindS(string s3,string s4){
     for(int i=0;i<s3.length();i++){
         if(s3[i]==s4[i]&&isalpha(s3[i]))
         {
             printf("%02d\n",i);
             return;
         }
     }
}
int main(){
    string s1,s2,s3,s4;
    cin>>s1>>s2>>s3>>s4;
    tofindC(s1,s2);
    tofindS(s3,s4);
    return 0;
}

不知道哪里错了
在这里插入图片描述

                 printf("%02d:",s1[i]-'0');

没有减0!!这是个字符,虽然是数字字符!!!输出是%d

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值