华为机试HJ29: 字符串加解密

Posted 翟天保Steven

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为机试HJ29: 字符串加解密相关的知识,希望对你有一定的参考价值。

题目描述:

1、对输入的字符串进行加解密,并输出。

2、加密方法为:

当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B;字母Z时则替换为a;

当内容是数字时则把该数字加1,如0替换1,1替换2,9替换0;

其他字符不做变化。

3、解密方法为加密的逆过程。

本题含有多组样例输入。

输入描述:

输入说明
输入一串要加密的密码
输入一串加过密的密码

输出描述:

输出说明
输出加密后的字符
输出解密后的字符

示例:

输入:

abcdefg

BCDEFGH

输出:

BCDEFGH

abcdefg

解题思路:

这道题就是个标准的字符串处理题,我就写了两个函数分别进行加密解密,比较简单;还有用密码本的方式做也可以。

测试代码:

#include <iostream>
#include <string>
using namespace std;

string encryption(string password)
{
    string result;
    int size=password.size();
    for(int i=0;i<size;++i)
    {
        if(password[i]>='A'&&password[i]<='Y')
        {
            result+=password[i]+33;
        }
        else if(password[i]=='Z')
        {
            result+=97;
        }
        else if(password[i]>='a'&&password[i]<='y')
        {
            result+=password[i]-31;
        }
        else if(password[i]=='z')
        {
            result+=65;
        }
        else if(password[i]>='0'&&password[i]<='8')
        {
            result+=password[i]+1;
        }
        else if(password[i]=='9')
        {
            result+='0';
        }
        else{
            result+=password[i];
        }
    }
    return result;
}

string decrypt(string password)
{
    string result;
    int size=password.size();
    for(int i=0;i<size;++i)
    {
        if(password[i]>='B'&&password[i]<='Z')
        {
            result+=password[i]+31;
        }
        else if(password[i]=='A')
        {
            result+='z';
        }
        else if(password[i]>='b'&&password[i]<='z')
        {
            result+=password[i]-33;
        }
        else if(password[i]=='a')
        {
            result+='Z';
        }
        else if(password[i]>='1'&&password[i]<='9')
        {
            result+=password[i]-1;
        }
        else if(password[i]=='0')
        {
            result+='9';
        }
        else{
            result+=password[i];
        }
    }
    return result;
}

int main()
{
    string p1,p2;
    while(cin>>p1>>p2)
    {
        string r1=encryption(p1);
        string r2=decrypt(p2);
        cout<<r1<<endl<<r2<<endl;
    }
    
    return 0;
}

以上是关于华为机试HJ29: 字符串加解密的主要内容,如果未能解决你的问题,请参考以下文章

华为机试HJ89:24点运算

华为机试HJ89:24点运算

华为机试HJ93:数组分组

华为机试HJ93:数组分组

华为机试HJ50:四则运算

华为机试HJ40:统计字符