A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Morning_jcg 中级黑马   /  2015-11-4 22:43  /  1131 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*********************************************************************************

以下为本人的基础测试题,所表答案为我的答案,分析也是自己的理解,如有不对,还望指正。

**********************************************************************************/
编程题1:
编程实现对键盘输入的英文名句子进行加密。用加密方法为:当内容为英文字母时,用26字母中的其后三个字母代替该字母,若为其它字符时不变。比如245a95n加密后是245bcd95opq。
我的实现:
  1. #include <stdio.h>
  2. #include <string.h>
  3. #define MAX 100

  4. int main(){
  5.         char a[MAX];
  6.         int i,len;
  7.         scanf("%s", a);
  8.         len=strlen(a);
  9.         for (i = 0; i < len; i++){
  10.                 if ((a[i] <= 'Z' && a[i] >= 'A') || (a[i] <= 'z' && a[i] >= 'a')){
  11.                         printf("%c%c%c", a[i] + 1, a[i] + 2, a[i] + 3);
  12.                 }
  13.                 else{
  14.                         printf("%c", a[i]);
  15.                 }
  16.         }

  17.         printf("\n");
  18.         return 0;
  19. }
复制代码
此题我比较偷懒,默认了输入的字符串中没有空格和回车,严格应该用gets获得所有的字符,然后保存在个字符数组里。实现更简单,直接通过一个循环,扫描每个字符,为字母就输出ascII表后三位的数值,由于我懒,所以我是一边扫一边输出,感觉存到一个新的数组一次性输出更好。还是由于我懒,我没有做xyz的边界检测,也就是说当输入的字符串中出现'x','y','z',的时候我这段码的输出的就会混进一些奇怪的字符。大家可能会说这是很严重的错误,你怎么能因为懒就不做呢?事实是我忘了,因为感觉题目太简单,所以写完也没测试(因为是记事本写的),提交上去的就是这个版本,真实地展现在了大家面前,而这个问题,我也是现在刚刚才发现的。看官们请轻喷。有什么问题欢迎大家一起讨论。




6 个回复

倒序浏览
你这个测试成功了吗?你确实是输出a后面的字符,但是并没有改变数组的内容
回复 使用道具 举报
怎么感觉不太对啊,除了边界问题,加密后插入字符后面的应该顺延吧,或者分割后拼接应该能实现这题目,最后需要输出整个字符串吧
回复 使用道具 举报
liruixue 发表于 2015-11-5 09:27
你这个测试成功了吗?你确实是输出a后面的字符,但是并没有改变数组的内容 ...

我并没有保存加密后的内容,只是直接输出了而已。原因如文中所见,懒。。
回复 使用道具 举报
许本亮 发表于 2015-11-5 10:03
怎么感觉不太对啊,除了边界问题,加密后插入字符后面的应该顺延吧,或者分割后拼接应该能实现这题目,最后 ...

我说了啊,,我没有保存加密后的字符串,以为一边加密我就一边输出了,,比较好的是再建一个字符串,加密后的字符串存进去,也不用顺延什么的了,,为什么没这么做,还是同文中所说,我懒,,,
回复 使用道具 举报
toveyloves 来自手机 中级黑马 2015-11-5 13:05:07
地板
这是什么班学习的知识?
回复 使用道具 举报
toveyloves 发表于 2015-11-5 13:05
这是什么班学习的知识?

ios,,,吧。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马