acwing第767题 信息加密(字母字符移位)

先上题目:

在传输信息的过程中,为了保证信息的安全,我们需要对原信息进行加密处理,形成加密信息,从而使得信息内容不会被监听者窃取。

现在给定一个字符串,对其进行加密处理。

加密的规则如下:

  1. 字符串中的小写字母,aa 加密为 bb,bb 加密为 cc,…,yy 加密为 zz,zz 加密为 aa。
  2. 字符串中的大写字母,AA 加密为 BB,BB 加密为 CC,…,YY 加密为 ZZ,ZZ 加密为 AA。
  3. 字符串中的其他字符,不作处理。

请你输出加密后的字符串。

输入格式

共一行,包含一个字符串。注意字符串中可能包含空格。

输出格式

输出加密后的字符串。

数据范围

输入字符串的长度不超过 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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值