PTA刷题Basic篇——1014福尔摩斯的约会——Day(7)

在这里插入图片描述
找出字符串中暗藏的"密码"。我们总共输入四个字符串,前两个比较会得到关于星期和时间的暗语,后两个字符串比较会得到具体分钟。

题目分析

先声明一个count,表示在第一个字符串和第二个字符串中已找到的相同字符串数目。对前两个字符串遍历比较,找出第一个相同位置且字符相同的大写字母,由于我们只有七个星期,所以大写字符一定要在’A’与’G’之间。这个时候如果找到了,将count+1,表示我们要开始找第二个相同字符串了。然后再找到第二个相同位置的相同字符(数字或大写字母),这里要判断一下查找条件:count==2。
如果是数字则可直接指示时间,如果是大写字母则通过一定的转换可得到时间。
然后对第三个和第四个字符串做相同的遍历比较,找到处在相同位置的相同的英文字母,它们的位置就是时间的具体分钟。例如s&hgsfdk 与d&Hyscvnm,它们的第一个共同字母是s,且处在第四个位置,则具体的分钟就是xx:04.
我们判断星期的时候要通过switch语句来输出。

代码

#include <iostream>
#include <string>
using namespace std;
int main()
{
 string s1, s2, s3, s4;
 cin>>s1>>s2>>s3>>s4;
 int i, j, count = 0;
 for(i = 0; i < s1.length() && i < s2.length(); ++i)
 {
  if(s1[i] >= 'A' && s1[i] <= 'G' && s1[i] == s2[i] && count == 0)
  {
   switch(s1[i] - 'A')
   {
    case 0:cout<<"MON ";break;
    case 1:cout<<"TUE ";break;
    case 2:cout<<"WED ";break;
    case 3:cout<<"THU ";break;
    case 4:cout<<"FRI ";break;
    case 5:cout<<"SAT ";break;
    case 6:cout<<"SUN ";break;
   }
   count++;
  }
  else if((s1[i] >= '0' && s1[i] <= '9' && s1[i] == s2[i] && count == 1) ||
          (s1[i] >= 'A' && s1[i] <= 'N' && s1[i] == s2[i] && count == 1))
  {
   if(s1[i] >= '0' && s1[i] <= '9')
    cout<<"0"<<s1[i]-'0'<<":";
   else if(s1[i] >= 'A' && s1[i] <= 'N')
    cout<<s1[i]-'A'+10<<":";
   count++;
  }
 }
 for(i = 0; i < s3.length() && i < s4.length(); ++i)
 {
  if( (s3[i] >= 'a' && s3[i] <= 'z' && s3[i] == s4[i]) ||
     (s3[i] >= 'A' && s3[i] <= 'Z' && s3[i] == s4[i]) )
  {
   if(i < 9)
    cout<<"0"<<i<<endl;
   else
    cout<<i<<endl;
   break;
  }
 }
 return 0;
}

总结

答题用时15min
Q14——finish√

发布了60 篇原创文章 · 获赞 2 · 访问量 1044

猜你喜欢

转载自blog.csdn.net/weixin_44755413/article/details/105509243