简述: 本题难度并不是很高 因为题目已经把思路叙述的差不多了 只是有一些细节需要注意
题目:
解法一: 用char型数组
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s1, s2, s3, s4;
cin >> s1 >> s2 >> s3 >> s4;
int count = 0;
char a = 0, b = 0;
int c = 0;
int flag = 0;
for (int i = 0; i<s1.length()&&i<s2.length(); i++)
{
if (!flag && s1[i] == s2[i] && s1[i] >= 'A' && s1[i] <= 'G')
{
a = s1[i];
flag = 1;
continue;
}
if (flag && s1[i] == s2[i] && ((s1[i] >= '0' && s1[i] <= '9') || (s1[i] >= 'A' && s1[i] <= 'N')))
{
b = s1[i];
break;
}
}
for (int i = 0; i < s3.length() && i < s4.length(); i++)
{
if (s3[i] == s4[i] && ((s3[i] >= 'a' && s3[i] <= 'z') || (s3[i] >= 'A' && s3[i] <= 'Z')))
{
c = i;
break;
}
}
int x = a - 'A' + 1;
int y = 0;
// 9 a b c d e
if (b > '9')
y = 9 + (b - 'A') + 1;
else
y = b - '0';
char arr[8][4] = { " ","MON","TUE","WED","THU","FRI","SAT","SUN" };
printf("%s %02d:", arr[x], y);
//cout << arr[x] << " " << y << ":";
printf("%02d", c);
//if (c < 10)
// cout << 0 << c;
//else
// cout << c;
return 0;
}
解法二: 用string类对象
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s1, s2, s3, s4;
cin >> s1 >> s2 >> s3 >> s4;
int count = 0;
char a = 0, b = 0;
int c = 0;
int flag = 0;
for (int i = 0; i<s1.length()&&i<s2.length(); i++)
{
if (!flag && s1[i] == s2[i] && s1[i] >= 'A' && s1[i] <= 'G')
{
a = s1[i];
flag = 1;
continue;
}
if (flag && s1[i] == s2[i] && ((s1[i] >= '0' && s1[i] <= '9') || (s1[i] >= 'A' && s1[i] <= 'N')))
{
b = s1[i];
break;
}
}
for (int i = 0; i < s3.length() && i < s4.length(); i++)
{
if (s3[i] == s4[i] && ((s3[i] >= 'a' && s3[i] <= 'z') || (s3[i] >= 'A' && s3[i] <= 'Z')))
{
c = i;
break;
}
}
int x = a - 'A' + 1;
int y = 0;
// 9 a b c d e
if (b > '9')
y = 9 + (b - 'A') + 1;
else
y = b - '0';
char arr[8][4] = { " ","MON","TUE","WED","THU","FRI","SAT","SUN" };
printf("%s %02d:", arr[x], y);
//cout << arr[x] << " " << y << ":";
printf("%02d", c);
//if (c < 10)
// cout << 0 << c;
//else
// cout << c;
return 0;
}
分析:
一.
用char数组和string差别不大 算法都一样 只是数据存储的方式不同而已 借此可以看出char数组和string对象的相似之处 : 可以把string对象当作char数组对待
二.
本题的 注意点:
1. 第一个字符的存储时 需要的范围是A到G 因为这是7个字母 对应七个星期 多了就不行了
2. 第二个字符存储时 为0-9 和 A-N
3. 引入flag变量 目的: 在第1个字符未存储时 不对第二个操作 第2个字符存储时 不对第一个操作
4. 第二个存储结束后 要break跳出 否则后面也可能会有满足条件的字符被存入 影响最初的那个符合条件的字符
三.
数据的打印
1. 引入二维字符数组 打印星期很方便 当然也可以用switch语句 还有 ‘A'-'A'=0 并不是1 我这里给数组多加一个空位 对字母也相应的加一个1 也可以都不加
2. 打印时 printf比cout方便很多 且注意小时和分钟输出时 不足2位要用0补齐 其实这个小时题中并没有体现 但是可以我们自己测试得出结论 (文中注释掉的为 cout方式输出时怎么补0 可参考)
(本人想写一个常用函数的详细说明类文章 看后面有没有机会发出来吧)