EOJ 3000 ROT13加密和解密

应用 ROT13 到一段文字上仅仅只需要检查字母顺序并取代它在 13 位之后的对应字母,有需要超过时则重新绕回 26 英文字母开头即可。A 换成 N、B 换成 O、依此类推到 M 换成 Z,然后串行反转:N 换成 A、O 换成 B、最后 Z 换成 M (如图所示)。只有这些出现在英文字母里的字符受影响;数字、符号、空白字符以及所有其他字符都不变。替换后的字母大小写保持不变。

 

Input

第 1 行:一个整数 T (1≤T≤10) 为问题数。

接下来共 T 行。每行为长度不超过 1000 个字符的一段文字。内含大小写字母、空格、数字和各种符号等。
Output

对于每个问题,输出一行问题的编号(0 开始编号,格式:case #0: 等)。

然后对应每个问题在一行中输出经过 ROT13 加密后的一段文字。


定义一个const数组,便于直接+13回转,省去判断是否需要绕回

 const string rot="ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

核心部分

1         string a;
2         getline(cin,a);
3         for(int i=0;i<a.size();i++)
4 if(isalpha(a[i])) 5 a[i]=a[i]>='a'?tolower(rot[a[i]-'a'+13]):rot[a[i]-'A'+13];
6
printf("case #%d:\n",m); 7 cout << a << endl;

注意原输入的大小写不可改变。

转载于:https://www.cnblogs.com/Jiiiin/p/8588252.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值