[编程入门]密码破译
时间限制: 2s 内存限制: 192MB 提交: 149059 解决: 84582
题目描述
要将"China"译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母.
例如,字母"A"后面第4个字母是"E"."E"代替"A"。因此,"China"应译为"Glmre"。
请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5分别变为’G’、’l’、’m’、’r’、’e’,并输出。
输入格式
China
输出格式
加密后的China
样例输入
China
样例输出
Glmre
有两种思路
第一种 字符数组
#include<iostream>
#include<cstring>
using namespace std;
char ch[20];
int main()
{
cin >> ch;
int a = strlen(ch);
for (int i = 0; i < a; i++)
{
if (ch[i] > 64 && ch[i] < 87 || ch[i]>96 && ch[i] < 119)
{
ch[i] += 4;
}
else if (ch[i] > 86 && ch[i] < 91 || ch[i]>118 && ch[i] < 123)
{
ch[i] -= 22;
}
}
cout << ch << endl;
return 0;
}
第二种 字符串
#include<iostream>
using namespace std;
int main()
{
string str;
cin >> str;
int a = str.length();
for (int i = 0; i < a; i++)
{
if (str[i] > 64 && str[i] < 87 || str[i]>96 && str [i] < 119)
{
str[i] += 4;
}
else if (str[i] > 86 && str[i] < 91 || str[i]>118 && str[i] < 123)
{
str[i] -= 22;
}
}
cout << str << endl;
return 0;
}
附加一个小key
字符与ascll码转换
char ch = 'a';
cout << ch + 1 << endl;
输出 98
很明显看出,此时 ch+1 表示是整数,是ascll码
这是因为有 +4 ,插入运算符(<<)将 ch 的类型进行调整为整数型
解决这个小问题有两种办法
第一种 给 ch+1 强制转换成字符型
char ch = 'a';
cout << char(ch + 1) << endl;
输出 b
第二种 用printf函数对输出类型细致化控制
char ch = 'a';
cout << char(ch + 1) << endl;
printf("%c", ch + 1);
输出 b
printf("%d", ch + 1);
输出 98