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