先上题目:
在传输信息的过程中,为了保证信息的安全,我们需要对原信息进行加密处理,形成加密信息,从而使得信息内容不会被监听者窃取。
现在给定一个字符串,对其进行加密处理。
加密的规则如下:
- 字符串中的小写字母,aa 加密为 bb,bb 加密为 cc,…,yy 加密为 zz,zz 加密为 aa。
- 字符串中的大写字母,AA 加密为 BB,BB 加密为 CC,…,YY 加密为 ZZ,ZZ 加密为 AA。
- 字符串中的其他字符,不作处理。
请你输出加密后的字符串。
输入格式
共一行,包含一个字符串。注意字符串中可能包含空格。
输出格式
输出加密后的字符串。
数据范围
输入字符串的长度不超过 100100。
输入样例:
Hello! How are you!
输出样例:
Ifmmp! Ipx bsf zpv!
最初的解题思路:
由于遇见字母 'z' 或 'Z' 需要将其变为 'a' ,那么将 z 或 Z 作为单独的一种情况,当字符为 z 或 Z 时,直接将其转换成 a 或 A。
部分代码如下:
if (s[i] == 'Z') s[i] = 'A';
if (s[i] == 'z') s[i] = 'a';
而后观看题解,学到新方法。
改进后的思路:
利用ascll码值,对字符进行改变,代码如下:
#include <iostream> #include <string> using namespace std; int main() { string a; getline(cin,a); int len=a.size();//计算字符串长度 for(int i=0;i<len;i++) { if(a[i]>='a'&&a[i]<='z') a[i]=(a[i]+1-'a')%26+'a'; /*因为题目要求向前移一位,假设a[i]是'a',那么(a[i]-'a'+1)%26就得到1, 再与后面的'a’相加,得到加密后的字符*/ else if(a[i]>='A'&&a[i]<='Z') a[i]=(a[i]+1-'A')%26+'A'; }cout<<a; return 0; }