密码翻译
内存限制:512Mb
时间限制:1s
题目描述
在情报传递过程中,为了防止情报被截获,往往需要对情报用一定的方式加密。我们给出一种最简单的加密方法,对给定的一个字符串,把其中从 a∼ya∼y,A∼YA∼Y 的字母用其后继字母替代,把 zz 和 ZZ 用 aa 和 AA 替代,其他非字母字符不变。请根据该加密规则将输入的密码进行解密。
提示:这里需要进行解密操作,而不是加密。
输入
一行,加密后的字符串,长度不多于 1000010000 个字符。
输出
一行,将密码解密后的字符串。
样例输入1
Ifmmp ! Ipx bsf zpv!
样例输出1
Hello ! How are you!
下面是代码:
#include<iostream>
#include<string>
#include<cctype>
using namespace std;
int main(){
string s;
getline(cin,s);
for(char &c:s)
{
if(isalpha(c))
{
if(c=='z')
c=='a';
else if(c=='Z')
c=='Z';
else c--;
}
}
cout<<s<<endl;
return 0;
}
头文件#include<cctype>中isalpha(c),c是一个字符,它的作用是判断字符是否为字母,返回值通常为1或0;isalnum(c)的作用与之相似,但多了一个判断是否为数字的条件,返回值同样。
for(char &c:s)是一个-based-for循环语句,代码中char &c 是用临时引用s容器中的每一个值,也就是临时存取,同时也意味着对c进行的改变会影响原字符串s中字符,而与之相似的一种用法for(char c:s)没有使用&,而是通过重新赋值,相当于c是s的一个副本,这表示c的变化不会影响原字符串s。两者均属于该语法。
-based-for循环语句是c++11以及11版本后的特性,相比于传统的for循环,它可以忽略数组下标,不需要手动限制初始化和终止条件,而是自动遍历所有元素,也可以使用auto关键字来定义数据类型。
欢迎大家补充与批评!