一道编程题的错误

来源:百度知道 编辑:UC知道 时间:2024/05/13 12:52:44
我在“请帮我完成这个解译电文程序(C语言)”的回答http://zhidao.baidu.com/question/85883860.html
程序运行结果
Input the a:abcdefghijklmnopqrstuvwxyz
Input the b:99999999999999999999999999
The output :jklmnopqrstuvwxyzabcdeÇüéâ

Input the a:abcdefghijklmnopqrstuvwxyz
Input the b:88888888888888888888888888
The output :ijklmnopqrstuvwxyzabcdeÇüé

Input the a:abcdefghijklmnopqrstuvwxyz
Input the b:77777777777777777777777777
The output :hijklmnopqrstuvwxyzabcdeÇü

Input the a:abcdefghijklmnopqrstuvwxyz
Input the b:66666666666666666666666666
The output :ghijklmnopqrstuvwxyzabcdeÇ

Input the a:ABCDEFGHIJKLMNOPQRSTUVWXYZ
Input the b:99999999999999999999999999
The output :JKLMNOPQRSTUVWXYZABCDEFabc

Input the a:ABCDEFGHIJKLMNOPQRSTUVWXYZ
Input the b:88888888888888888888888888

小写后面出现乱码那是因为数据类型的关系
char类型范围是-128 ~ 127
'z' 的ascii码是122,+9的话就是131,大于127,于是('z'+9)其实是个负数了。
你可以将pa pb的类型改为unsigned char*就行了

而大写Z加数字后变小写,那是逻辑判断有问题,再仔细想想好了。我是大小写分开判断,没有放在一起。放在一起比较搞

代码见你的http://zhidao.baidu.com/question/85883860.html

这么简单的问题!
这题我给你的代码是最规范的。很显然你的字符串a和b的长度要一致,要不然后面不一致的部分字符显示是内存中的随机数,是不定的。加密解密数据长度要一致,这样才能进行加密解密计算嘛。
为何说我给你的代码是最规范的?因为我的算法是求模。比如当字符'z'加数值6后就不再是字母字符了,他们的那些程序都是一个毛病,没有考虑到当字符加上一个数值后会超过'z'的asc2码值从而显示的不是字母字符,而我的程序是求模,('z'+6)%26+'a'加密后回转为'f',还在字符a-z或A-Z以内。

行家一伸手,知道有没有。代码的优劣一看算法就知道了。看来你是个新手。