C语言题目
编写主函数,输入一个字符串(长度小于80个字符),调用encrypt()函数后输出密码。编写void encrypt(char str[])函数,将字符串译成密码。译码规则:将z或Z变成a或A,其它英文字母变为ASCII值比它大1的字母,其余字符保持不变。
例如:原文为“Amazon”,密码为“Bmbapo”
解题思路
从程序的目的上来讲,无非就是将输入的字符串存入字符数组中,调用自定义函数encrypt将字符串译成密码,自定义函数中的简单加密算法就是在循环中进行判断,将z变成a、Z变成A,剩余英文字母的ASCII向后移一位并输出,剩余字符不变。
从程序运行的流程上详细讲就是(算法):
- 输入字符串并存入字符数组中
- 调用自定义函数encrypt,将字符数组传入该函数
- 对字符数组中的每个字符进行遍历
- 执行循环的条件可以是小于等于字符串的最大长度(strlen(str)i)或者是所遍历的字符不为字符串的结尾标识符(str[i]!=’\0’)
- 而后循环内的判断语句的判断条件就是进行递进式、特殊性优先的判断,例如:先判断是否是’z’或’Z’,是则对字符减25就可以直接得到对应的’a’或’A’,排除前者的特殊性后判断是否为字母,而后进行ASCII码后移一位,最后剩余的字符不变就是不操作了,哈哈。
- 输出即可(注意:以上本人并没有讲解对于更变的字符该放哪里,可以是直接对字符数组内的字符进行操作/加密再直接输出,也可以直接输出加密/操作后的,或者引入第三者字符数组存储加密/操作后的字符,然后输出,对于本题简单的功能来讲,随性操作就行了,如果是现实中的一些问题,那得具体情况具体分析了,编程直接目的就是为了完成具体功能,目的达成即可,不必刻意追求完美)
代码实践
以下为本人实践(已附上注释方便阅读理解,对于存在 {} 结构化,主要是为了在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
- 最新
- 最热
只看作者