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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张海龙重新起航 中级黑马   /  2014-4-5 19:48  /  2151 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张海龙重新起航 于 2014-4-5 20:53 编辑

  1. /*编程实现对键盘输入的英文名句子进行加密。用加密方法为:当内容为英文字母时,用26字母中的其后三个字母代替该字母,若为其它字符时不变。比如245a95n加密后是245bcd95opq。(C语言)
  2. 思路:
  3.     1,输入的英文字母为前23个字母时,用其后的3个字母来代替;
  4.     2,输入的英文字母为x时,用yzz来代替,X时用YZZ来代替;
  5.     3,输入的英文字母为y、z时,用zzz来代替,Y、Z时用ZZZ来代替;
  6.     4,输入其他字符时不变;
  7. */

  8. #include <stdio.h>
  9. #include <string.h>

  10. int main()
  11. {
  12.     char str1[1024],str2[1024];
  13.     int i=0,j=0;
  14.     printf("请输入一串字符:");
  15.     scanf("%s",str1);
  16.     while(str1[i]!='\0')
  17.     {
  18.         if((str1[i]>='a'&&str1[i]<='z')||(str1[i]>='A'&&str1[i]<='Z')) {       //输入的英文字母为前23个字母时,用其后的3个字母来代替;
  19.         if((str1[i]>='a'&&str1[i]<='w')||(str1[i]>='A'&&str1[i]<='W'))
  20.             {
  21.                 for (int k=1; k<4; k++)
  22.                 {
  23.                     str2[j]=str1[i]+k;
  24.                     j++;
  25.                 }
  26.                
  27.             }
  28.         //输入的英文字母为x时,用yzz来代替,X时用YZZ来代替;
  29.          else if((str1[i]=='x')|(str1[i]=='X'))
  30.          {
  31.              for (int k=1;k<3; k++)
  32.              {
  33.                 str2[j]=str1[i]+k;
  34.                 j++;
  35.              }
  36.             str2[j]=str1[i]+2;
  37.             j++;
  38.          }
  39.         //输入的英文字母为y时,用zzz来代替,Y时用ZZZ来代替;
  40.          else if((str1[i]=='y')||(str1[i]=='Y'))
  41.          {
  42.              for (int k=1;k<4; k++)
  43.              {
  44.                  str2[j]=str1[i]+1;
  45.                  j++;
  46.              }
  47.          }
  48.         //输入的英文字母为z时,用zzz来代替,Z时用ZZZ来代替;
  49.          else
  50.          {
  51.              for (int k=1;k<4; k++)
  52.              {
  53.                  str2[j]=str1[i];
  54.                  j++;
  55.              }
  56.          }}
  57.         //输入其他时不变;
  58.         else
  59.         {
  60.             str2[j]=str1[i];
  61.             j++;
  62.         }
  63.         i++;
  64.     }
  65.     printf("加密后的字符串为%s\n",str2);
  66. }
复制代码

为什么代码输出结果不对呢?求帮助,谢谢!(不考虑思路错误的前提下)

9 个回复

倒序浏览
appledeiMac:~ apple$ cd documents/c/test
appledeiMac:test apple$ touch c4.c
appledeiMac:test apple$ open c4.c
appledeiMac:test apple$ cc c4.c
appledeiMac:test apple$ ./a.out
请输入一串字符:245a95n
加密后的字符串为245bcd95opq
appledeiMac:test apple$

输出结果没错啊
回复 使用道具 举报 1 0
Last login: Sat Apr  5 19:45:42 on console
yqqdeMac:~ yqq$ touch 00-1.m
yqqdeMac:~ yqq$ open 00-1.m
yqqdeMac:~ yqq$ cc -c 00-1.m
yqqdeMac:~ yqq$ cc 00-1.o
yqqdeMac:~ yqq$ ./a.out
请输入一串字符:245a95n
加密后的字符串为245bcd95opq
yqqdeMac:~ yqq$

在不考虑错误思路的情况下,输出结果对啊
回复 使用道具 举报
一只小菜鸟 发表于 2014-4-5 20:08
appledeiMac:~ apple$ cd documents/c/test
appledeiMac:test apple$ touch c4.c
appledeiMac:test apple$  ...

输出xyz这三个字母的时候不对
回复 使用道具 举报
haohaoxuexi 发表于 2014-4-5 20:24
Last login: Sat Apr  5 19:45:42 on console
yqqdeMac:~ yqq$ touch 00-1.m
yqqdeMac:~ yqq$ open 00-1.m  ...

输出xyz这三个字母的时候不对
回复 使用道具 举报
张海龙重新起航 发表于 2014-4-5 20:27
输出xyz这三个字母的时候不对

yqqdeMac:~ yqq$ cc -c 00-1.m
yqqdeMac:~ yqq$ cc 00-1.o
yqqdeMac:~ yqq$ ./a.out
请输入一串字符:45x67y89z
加密后的字符串为45yzz67zzz89zzz
yqqdeMac:~ yqq$
回复 使用道具 举报
张海龙重新起航 发表于 2014-4-5 20:25
输出xyz这三个字母的时候不对

appledeiMac:test apple$ ./a.out
请输入一串字符:XYZ
加密后的字符串为YZZZZZZZZ
appledeiMac:test apple$ ./a.out
请输入一串字符:xyz
加密后的字符串为yzzzzzzzz
appledeiMac:test apple$

不是挺对的么

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
啊? 我再试试
回复 使用道具 举报
这是我写的代码,一步一步判断字符的值,如果不是英文字母打印它本身
  1. void putout(char ch){
  2.         if(ch>='A')//如果字符的asc11值大于A,则进入下面的语句
  3.         {
  4.         if(ch<'X'){//如果字符是A到W之间的英文字母,则输出它后面的三位
  5.                 printf("%c",ch+1);
  6.                 printf("%c",ch+2);
  7.                 printf("%c",ch+3);
  8.         }
  9.         else if(ch<='Z')//如果他是X,则输出YZA,Y则输出ZAB.Z则输出ABC
  10.         {
  11.                 printf("%c",ch-23);
  12.                 printf("%c",ch-22);
  13.                 printf("%c",ch-21);
  14.         }       
  15.         else if(ch>='a')//如果字符的asc11值大于a,则进入下面的语句
  16.                 if(ch<'x')//如果字符是a到w之间的英文字母,则输出它后面的三位
  17.                 {
  18.                 printf("%c",ch+1);
  19.                 printf("%c",ch+2);
  20.                 printf("%c",ch+3);
  21.                 }
  22.         else if(ch<='z')//如果他是x,则输出yza,y则输出zab.z则输出abc
  23.         {
  24.                 printf("%c",ch-23);
  25.                 printf("%c",ch-22);
  26.                 printf("%c",ch-21);
  27.         }
  28.         else printf("%c",ch);//进入到这一行说明这个字符不是英文字母,打印他本身。
  29.         }       
  30.         else printf("%c",ch);//进入到这一行说明这个字符不是英文字母,打印他本身。
  31.                
  32. }
复制代码

评分

参与人数 1黑马币 +30 收起 理由
fantacyleo + 30 乐于助人

查看全部评分

回复 使用道具 举报
,,,,,这个 好像就是我抽得题
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马