解密
题目描述
在打仗的时候,电报是通信的主要手段,但是电报内容一旦被敌方窃取,那后果将会非常严重,于是通信员在发
电报的时候通常就会对电报加密,这样即使电报内容被敌方窃取也没有大碍了。现在给定一个未加密的电报要求
输出加密后的电报,或者给一个加密后的电报,将它翻译成未加密状态的电报以供首长阅读。现在给定一个很简
单的加密方式:每个字母加密后为该字母后继的第二位(如a加密后为c,z加密后是b),解密就是将每个字母换
成该字母的前面第二个(如c解密后为a,b解密后是z)
输入格式
有多个测试数据,每个测试数据占一行,首先是一个大写字母D(对目标进行解密操作)或者E(对目标进行加密
操作),后面跟着一个空格,再后面是一个目标字符串(可能含有空格、符号、大小写字母),每个测试字符串
长度不超过10^5
输出
每个测试输出占一行,为加密或者解密后的字符串。
样例输入
E Go forward.
D Iq hqtyctf.
样例输出
Iq hqtyctf.
Go forward.
我是一个个的输出的,,,这题以我的思路很简单,注意A\a,B\b与Y\y,Z\z的情况就行了,
这是我的代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
//freopen("F:\\TestFiles\\test.in","r",stdin);
//freopen("F:\\TestFiles\\test2.out","w",stdout);
char ch;
int i,j;
char str1[10000];//数组要定大一点才可以,不然会出现运行错误
//printf("ok\n");
while(scanf("%c ",&ch)!=EOF)//这个地方可以改成while(gets(str1)!=NULL)判断str[0]是否为‘D’,‘E’,这样会安全一些
{
gets(str1);
//printf("%s\n",str1);
int len=strlen(str1);
if(ch=='E')
{
for(i=0;i<len;i++)
{
if(str1[i]>='a'&&str1[i]<='z'||str1[i]>='A'&&str1[i]<='Z')
{
if(str1[i]=='y'||str1[i]=='Y'||str1[i]=='Z'||str1[i]=='z')
{
printf("%c",str1[i]-24);//用ASCLL码进行转换,也可以直接输出;
}
else
printf("%c",str1[i]+2);
}
else
printf("%c",str1[i]);
}
printf("\n");
}
if(ch=='D')
{
for(i=0;i<len;i++)
{
if(str1[i]>='a'&&str1[i]<='z'||str1[i]>='A'&&str1[i]<='Z')
{
if(str1[i]=='a'||str1[i]=='A'||str1[i]=='b'||str1[i]=='B')
{
printf("%c",str1[i]+24);
}
else
printf("%c",str1[i]-2);
}
else
printf("%c",str1[i]);
}
printf("\n");
}
}
return 0;
}