解密

解密

时间限制:1 秒
内存限制:128 兆
特殊判题: 否
提交:20
解决: 5

题目描述

在打仗的时候,电报是通信的主要手段,但是电报内容一旦被敌方窃取,那后果将会非常严重,于是通信员在发

电报的时候通常就会对电报加密,这样即使电报内容被敌方窃取也没有大碍了。现在给定一个未加密的电报要求

输出加密后的电报,或者给一个加密后的电报,将它翻译成未加密状态的电报以供首长阅读。现在给定一个很简

单的加密方式:每个字母加密后为该字母后继的第二位(如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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值