为什么csdn做笔记如此难用= =。要不以后还是有道云吧
1.确当周几的字母是A~G,所以遍历字符串的时候,第一个和第二个字符串的相同位置字母不仅一样,还要是A~G内的
2.确定小时的字符是在满足1条件的字母的位置(因为两个字符串第一个相同的字符是8,但题目的陈述的是E,这是隐含信息)后面查找,范围0~9和A~N以内,字母是看它在字母表中的位置,A的位置为1。
3.两个字符串中相同位置具有相同字母的对数不止两对,所以在确定小时候一定要跳出循环,不然后面还可能又有一对满足2的,这就错误了,有一个测试点的陷阱就在这里。
4.最后两个字符串中确当分钟的是英文字母A~Z 以及a~z,在字符串的相对位置(从零开始计数)。
5.小时或者分钟不满足两位的要记得补零。
又wa了,找不到是怎么错的!结果发现是return 0;写错位置了= =。
改掉,还是有问题,多了一行04,原来是少加了一个break。
测试用例:
3485djGkxh4hhG2
2984akGfkkkkgg2dsb
s&hgsfdk
d&hyscvnm
对应输出应该为:
SUN 02:02
你的输出为:
SUN 02:02
04
真的 无法忍受不能高亮这个问题 ,那就截图吧。。。。
错解:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<map>
#include<vector>
#include<string>
using namespace std;
#define N 60
int main()
{
string s1,s2,s3,s4;
cin>>s1>>s2>>s3>>s4;
int mark=0;
for(int i=0;i<s1.size()&&i<s2.size();i++)
{
if(s1[i]==s2[i]&&(s1[i]>='A'&&s1[i]<='G'))
{
switch(s1[i])
{
case'A': cout<<"MON ";break;
case'B': cout<<"TUE ";break;
case'C': cout<<"WED ";break;
case'D': cout<<"THU ";break;
case'E': cout<<"FRI ";break;
case'F': cout<<"SAT ";break;
case'G': cout<<"SUN ";break;
}
mark=i;//记录位置
break;
}
}
for(int j=mark+1;j<s1.size()&&j<s2.size();j++)
{
if(s1[j]==s2[j]&&((s1[j]>='A'&&s1[j]<='N')||(s1[j]>='0'&&s1[j]<='9')))
{
if(s1[j]>='A'&&s1[j]<='N')
{
int x=s1[j]-'A'+10;//简单转换成数字
cout<<x/10<<x%10<<":";
}
else
{
int y=s1[j]-'0';//注意此处转换,字母到十进制数
cout<<y/10<<y%10<<":";
}
break;
}
}
for(int k=0;k<s3.size()&&k<s4.size();k++)
{
if(s3[k]==s4[k]&&((s3[k]>='A'&&s3[k]<='Z')||(s3[k]>='a'&&s3[k]<='z'))){
cout<<(k)/10<<(k)%10<<endl;
}
return 0;
}
}
来看看其他做法: