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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

2黑马币
题目:编程实现对键盘输入的英文名句子进行加密。
用加密方法为:当内容为英文字母时,用26字母中的其后三个字母代替该字母,若为其它字符时不变。
比如245a95n加密后是245bcd95opq。(C语言)
我现在写的代码是这样的:
  1. <p>
  2. #include <stdio.h></p><p>int main()
  3. {
  4. //提示用户输入句子,定义一个字符串数组并把用户输入的句子传入
  5. printf("请输入英文句子:\n");
  6. char *sentence;
  7. scanf ("%s", sentence);

  8. int i = 0;
  9. //遍历字符串中每个字母
  10. for(i = 0; i < strlen(sentence); i++)  
  11. {
  12.   //把字母赋给一个字符变量
  13.   char w = sentence[i];
  14.   char fin[i];
  15.   
  16.   //如果'w'在a到w或A到W之间 就输出他后面三个 ,因为w后面有xyz所以可以正常输出后面三个
  17.   if( (w >= 'a' && w <= 'w') || (w >='A' && w <= 'W') )
  18.   {
  19.    fin[1] = w+1;
  20.    fin[2] = w+2;
  21.    fin[3] = w+3;
  22.   }
  23.   else if( w=='x' || w=='X')
  24.   {
  25.    fin[1] = w+1;
  26.    fin[2] = w+2;
  27.    fin[3] = w+3-26;  
  28.   }
  29.   
  30.   else if( w=='y' || w=='Y')
  31.   {
  32.    fin[1] = w+1;
  33.    fin[2] = w+2-26;
  34.    fin[3] = w+3-26;
  35.   }
  36.   
  37.   else if( w=='z' || w=='Z')
  38.   {
  39.    fin[1] = w+1-26;
  40.    fin[2] = w+2-26;
  41.    fin[3] = w+3-26;  
  42.   }
  43.   
  44.   //其他的原样输出
  45.   else                 
  46. }</p><p>//输出
  47. }</p>
复制代码
写到最后发现不知该怎么输出,求大神指点!

最佳答案

查看完整内容

因为后面有特殊情况,你没考虑周全,这是一个完整的代码

6 个回复

倒序浏览
因为后面有特殊情况,你没考虑周全,这是一个完整的代码
  1. //编程实现对键盘输入的英文名句子进行加密。用加密方法为:
  2. //当内容为英文字母时,用26字母中的其后三个字母代替该字母,若为其它字符时不变
  3. #include <stdio.h>
  4. int main()
  5. {
  6.         char c;  
  7.         printf("please input a string:");
  8. //每次从缓冲区读取一个字符,然后赋给c,!='\n'则进入循环
  9.         while((c=getchar())!='\n')
  10.         {
  11. //获取字母使其+1,编程下一个字母
  12.                 if(c>='A'&&c<='Y'||c>='a'&&c<='y')
  13.                 {
  14.                         c=c+1;
  15.                 }
  16.                 else  if(c=='Z'||c=='z')
  17.                 {
  18.                         c=c-25;
  19.                 }
  20. //输出改变字母后的字符串
  21.                 printf("%c",c);
  22. //针对字符串内的字母进行处理,并输出
  23.                 if(c>='B'&&c<='X'||c>='b'&&c<='x')
  24.                 {                 
  25.                         char a[2] = {c+1,c+2};
  26.                         for(int i = 0;i<2;i++)
  27.                                 printf("%c",a[i]);
  28.                 }
  29.                
  30.                 else
  31.                 {
  32. //针对字符串内的特殊的字母进行处理,并输出
  33.                         if(c=='Y'||c=='y')
  34.                                
  35.                         {
  36.                                 char b[2] = {c+1,(c+2)-26};
  37.                                 for(int i = 0;i < 2; i++)
  38.                                 {
  39.                                         printf("%c",b[i]);
  40.                                 }
  41.                         }
  42.                         else       
  43.                                 if(c=='Z'||c=='z')
  44.                                        
  45.                                 {
  46.                                         char b[2] = {(c+1)-26,(c+2)-26};
  47.                                         for(int i = 0;i < 2; i++)
  48.                                         {
  49.                                                 printf("%c",b[i]);
  50.                                         }
  51.                                 }
  52.                                 else if(c=='A'||c=='a')
  53.                                        
  54.                                 {
  55.                                         char b[2] = {c+1,c+2};
  56.                                         for(int i = 0;i < 2; i++)
  57.                                         {
  58.                                                 printf("%c",b[i]);
  59.                                         }
  60.                                 }
  61.                 }
  62.         }
  63.         printf("\n");
  64.         return 0;  
  65. }
复制代码

点评

谢谢哥们儿  发表于 2014-12-12 18:41
回复 使用道具 举报
你这个思路逻辑上有问题,原字符串的长度有变化,length要做相应的处理。
回复 使用道具 举报
正确的思路应该是:当有输入且未到结尾时进行相关加密。
这样就可以不用考虑字符串长度变化带来的困扰了。
你可以再研究下,尽量自己解决,不行的话,给你代码
回复 使用道具 举报
最后的思路有问题啊,length要做处理啊
回复 使用道具 举报
我都没考虑到输入Zz的情况,直接输出c+1,c+2的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马