题目描述
大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧!3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm”。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间“星期四 14:04”,因为前面两字符串中第1对相同的大写英文字母(大小写有区分)是第4个字母’D’,代表星期四;第2对相同的字符是’E’,那是第5个英文字母,代表一天里的第14个钟头(于是一天的0点到23点由数字0到9、以及大写字母A到N表示);后面两字符串第1对相同的英文字母’s’出现在第4个位置(从0开始计数)上,代表第4分钟。现给定两对字符串,请帮助福尔摩斯解码得到约会的时间。
输入描述:
输入在4行中分别给出4个非空、不包含空格、且长度不超过60的字符串。
输出描述:
在一行中输出约会的时间,格式为“DAY HH:MM”,其中“DAY”是某星期的3字符缩写,即MON表示星期一,TUE表示星期二,WED表示星期三,THU表示星期
四,FRI表示星期五,SAT表示星期六,SUN表示星期日。题目输入保证每个测试存在唯一解。
输入例子:
3485djDkxh4hhGE
2984akDfkkkkggEdsb
s&hgsfdk
d&Hyscvnm
输出例子:
THU 14:04
方案一:
#include <iostream>
#include <vector>
#include <string>
#include <iomanip>
using namespace std;
void week(int a);
int main()
{
string v1, v2;
vector<string> nun;
int i = 4;
while (i--)
{
cin >> v1;
if (v1.length() > 60) return 0;
else nun.push_back(v1);
}
v1 = nun[0];v2 = nun[1];
int j = 0, k = 0, temp = 0;
int len1 = v1.length(), len2 = v2.length();
while ((len1--) && (len2--))//前两个string比较
{
if (k == 0)
for (; v1[j] != v2[j] || v1[j] < 64 || v1[j] > 122; j++);
else
for (; v1[j] != v2[j]; j++);
if (k == 1)
{
if (v1[j] > 64)
{
temp = v1[j] - 55;
}
else
{
temp = v1[j] - 48;
}
cout << setfill('0') << setw(2) << temp << ":";
break;
}
else if (k == 0)
{
week(v1[j] - 64);
k++;
}
j++;
}
v1 = nun[2]; v2 = nun[3];
len1 = v1.length(), len2 = v2.length();
j = 0;
while ((len1--) && (len2--))//后两个string比较
{
while (v1[j] != v2[j] || v1[j] <= 97 || v1[j] >= 122)j++;
cout << setfill('0') << setw(2) << j ; break;
}
return 0;
}
void week(int a)
{
switch (a)
{
case 1:
cout << "MON ";
break;
case 2:
cout << "TUE ";
break;
case 3:
cout << "WED ";
break;
case 4:
cout << "THU ";
break;
case 5:
cout << "FRI ";
break;
case 6:
cout << "SAT ";
break;
case 7:
cout << "SUN ";
break;
}
}
方案二:
#include <iostream>
#include <vector>
#include <string>
#include <iomanip>
using namespace std;
int main()
{
string v1, v2;
vector<string> nun;
string a[7] = { "MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN" };
int i = 4;
while (i--)
{
cin >> v1;
if (v1.length() > 60) return 0;
else nun.push_back(v1);
}
v1 = nun[0];v2 = nun[1];
int j = 0, k = 0, temp = 0;
int len1 = v1.length(), len2 = v2.length();
while ((len1--) && (len2--))//前两个string比较
{
if (k == 0)
for (; v1[j] != v2[j] || v1[j] < 64 || v1[j] > 122; j++);
else
for (; v1[j] != v2[j]; j++);
if (k == 1)
{
if (v1[j] > 64)
{
temp = v1[j] - 55;
}
else
{
temp = v1[j] - 48;
}
cout << setfill('0') << setw(2) << temp << ":";
break;
}
else if (k == 0)
{
cout<<a[v1[j] - 65]<<" ";
k++;
}
j++;
}
v1 = nun[2]; v2 = nun[3];
len1 = v1.length(), len2 = v2.length();
j = 0;
while ((len1--) && (len2--))//后两个string比较
{
while (v1[j] != v2[j] || v1[j] <= 97 || v1[j] >= 122)j++;
cout << setfill('0') << setw(2) << j ; break;
}
return 0;
}
iomanip 头文件:主要是对cin,cout之类的一些操纵运算子,比如setfill,setw,setbase,setprecision等等。它是I/O流控制头文件,就像C里面的格式化输出一样.以下是一些常见的控制函数的:
dec 置基数为10 相当于”%d”
hex 置基数为16 相当于”%X”
oct 置基数为8 相当于”%o”
setfill( ‘c’ ) 设填充字符为c
setprecision( n ) 设显示有效数字为n位
setw( n ) 设域宽为n个字符
这个控制符的意思是保证输出宽度为n。如:
cout << setw( 3 ) << 1 << setw( 3 ) << 10 << setw( 3 ) << 100 << endl; 输出结果为
_ _1_10100 (默认是右对齐)当输出长度大于3时(<<1000),setw(3)不起作用。