• 选择结构——字符加密


    【问题描述】

    输入5个小写字母,将其译成密码。密码规律是:用原来的字母后面第4个字母代替原来的字母。例如,输入“ahoux”,‘a’->‘b’->‘c’->‘d’->‘e’,所以字母‘a’后面第4个字母是‘e’,用‘e’代替‘a’;字母‘x’后面不足4个字母,则从‘a’开始补充,‘x’->‘y’->‘z’->‘a’->‘b’,所以字母‘x’后面第4个字母是‘b’,用‘b’代替‘x’。因此,“ahoux”应译为“elsyb”。

    【输入形式】

    连续输入5个字符

    【输出形式】

    连续输出5个字符

    【样例输入】

    world

    【样例输出】

    asvph

    【样例说明】

    ‘w’后面第4字符已超出小写字母范围,因此回到开头继续数,是’a’,‘o’后面第4个字符是’s’,‘r’后面第4个字符是’v’,‘l’后面第4个字符是’p’,‘d’后面第4个字符是’h’

    题目分析

    解法有很多,但无论如何,都逃不开if else这种选择结构。
    那么问题来了,如何实现这个程序?
    其实最本质的问题就是什么字母后移4个单位之后,是否越界。如果越界就要重新来,如果不越界那就直接加上4——当然,要注意数据类型的转换。

    先提供只涉及if else的代码

    #include
    using namespace std;
    int main()
    {
    	char a,b,c,d,e;
    	cin>>a>>b>>c>>d>>e;
    	if(a+4>122) cout<<(char)(a-22);
    	else cout<<(char)(a+4);
    	if(b+4>122) cout<<(char)(b-22);
    	else cout<<(char)(b+4);
        if(c+4>122) cout<<(char)(c-22);
    	else cout<<(char)(c+4);
    	if(d+4>122) cout<<(char)(d-22);
    	else cout<<(char)(d+4);
    	if(e+4>122) cout<<(char)(e-22);
    	else cout<<(char)(e+4);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    但是,作为选择结构的最后一题,为了和后面饿循环结构有一个平稳的过渡,我们不妨从另一个角度思考一下:这程序是否可以简化?换句话说,这个程序有没有比较冗余的地方?
    其实是有的。
    很容易观察出来,五组if else基本上都在做相同的事情。相同!那就有循环结构存在的意义了!当然,有点超纲,可是前面写程序的时候已经发现有人不讲武德了,那我也没什么好说的了。顺便用上数组了。

    循环结构和字符数组类代码

    #include
    using namespace std;
    int main()
    {
    	char c[5];
    	for(int i=0;i<5;i++) cin>>c[i];
    	for(int i=0;i<5;i++)
    	 if(c[i]+4>'z') cout<<(char)(c[i]-22);
    	 else cout<<(char)(c[i]+4);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    用上循环结构,程序是不是简洁很多呢?
    所以,写程序一段时间之后,可以通过后面的知识点再重新A掉前面的题,应该是会对水平有提升的——至少可以巩固知识点。

  • 相关阅读:
    mdkarm怎么编程:深度探索与实用指南
    可交互提示Snackbar
    Mybatis整合达梦数据库
    win11 使用 QEMU 配置龙芯 3A5000 虚拟环境
    Elasticsearch7.x.x开启X-pack鉴权,按步骤执行就能成功!
    【51单片机】认识单片机
    C++ 重载
    【开题报告】基于SpringBoot的膳食营养健康网站的设计与实现
    【网络】对于我前面UDP博客的补充
    pyspark常用功能记录
  • 原文地址:https://blog.csdn.net/qq_43034907/article/details/126986317