自定义函数encrypt将字符串简单加密

C语言题目

编写主函数,输入一个字符串(长度小于80个字符),调用encrypt()函数后输出密码。编写void encrypt(char str[])函数,将字符串译成密码。译码规则:将z或Z变成a或A,其它英文字母变为ASCII值比它大1的字母,其余字符保持不变。

例如:原文为“Amazon”,密码为“Bmbapo”

解题思路

从程序的目的上来讲,无非就是将输入的字符串存入字符数组中,调用自定义函数encrypt将字符串译成密码,自定义函数中的简单加密算法就是在循环中进行判断,将z变成a、Z变成A,剩余英文字母的ASCII向后移一位并输出,剩余字符不变。

从程序运行的流程上详细讲就是(算法):

  1. 输入字符串并存入字符数组中
  2. 调用自定义函数encrypt,将字符数组传入该函数
  3. 对字符数组中的每个字符进行遍历
  4. 执行循环的条件可以是小于等于字符串的最大长度(strlen(str)i)或者是所遍历的字符不为字符串的结尾标识符(str[i]!=’\0’)
  5. 而后循环内的判断语句的判断条件就是进行递进式、特殊性优先的判断,例如:先判断是否是’z’或’Z’,是则对字符减25就可以直接得到对应的’a’或’A’,排除前者的特殊性后判断是否为字母,而后进行ASCII码后移一位,最后剩余的字符不变就是不操作了,哈哈。
  6. 输出即可(注意:以上本人并没有讲解对于更变的字符该放哪里,可以是直接对字符数组内的字符进行操作/加密再直接输出,也可以直接输出加密/操作后的,或者引入第三者字符数组存储加密/操作后的字符,然后输出,对于本题简单的功能来讲,随性操作就行了,如果是现实中的一些问题,那得具体情况具体分析了,编程直接目的就是为了完成具体功能,目的达成即可,不必刻意追求完美)

代码实践

以下为本人实践(已附上注释方便阅读理解,对于存在 {} 结构化,主要是为了在IDE中阅读更清晰):

#include<stdio.h>
void encrypt(char str[]){       //encrypt自定义函数
    int i;      //定义一个整型变量i,用于后面的for循环
    for(i=0;str[i]!='\0';i++){      //for循环,由于传入的是str数组,所以下标从i=0开始,执行的条件是当前遍历的字符不为字符串的结尾标识符'\0'
        if(str[i]=='z' || str[i] == 'Z'){   //判断当前遍历的字符是否为'z'或者'Z'
            str[i]-=25;     //是'z'或者'Z'的话就减去25,就是得到所对应的'a'或'A'
        }else{      //if判断语句的或者
            if(str[i]>='A' && str[i]<'Z' || str[i]>='a' && str[i]<'z'){     //嵌套if语句,判断是否为英文字母,注意此处边界条件是否为<='z' <='Z'亦或是<'z' <'Z',均可,因为最外部的if语句已经判断过了
                str[i]+=1;      //是的话就ASCII码加1,对应的就是变成所遍历的字符变成了比它ASCII码大1的字符
            }
        }
    }
    printf("%s\n",str);     //以字符串的形式输出str数组
}
int main(){     //主函数
    char str[80];   //定义字符数组
    scanf("%s",str);    //输入字符串并存入字符数组
    encrypt(str);   //调用函数encrypt并存入str数组
    return 0;
}
© 版权声明
THE END
喜欢就点赞支持一下吧,如果觉得不错或日后有所需要,可以收藏文章和关注作者哦。
点赞7打赏 分享
评论 共2条

请登录后发表评论