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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

感觉我写的有点麻烦,有更简单的方法吗?
  1. #include"stdio.h"
  2. #include"string.h"

  3. char function(char str[]);

  4. int main()
  5. {
  6.         char s[100];
  7.         int len,i,j;

  8.         scanf("%s",s);
  9.         len = strlen(s);

  10.         for(i=0;i<len;i++)
  11.         {
  12.                 if(s[i]>='a' && s[i]<='w')
  13.                 {
  14.                         len+=2;
  15.                         for(j=len;j>i+2;j--)
  16.                                 s[j]=s[j-2];
  17.                         s[i]=s[i]+1;
  18.                         s[i+1]=s[i]+1;
  19.                         s[i+2]=s[i]+2;
  20.                         i+=3;
  21.                 }
  22.                 else if(s[i]>='x' && s[i]<='z')
  23.                 {
  24.                         len+=2;
  25.                         for(j=len;j>i+2;j--)
  26.                                 s[j]=s[j-2];
  27.                         if(s[i]=='x')
  28.                         {
  29.                                 s[i]='y';
  30.                                 s[i+1]='z';
  31.                                 s[i+2]='a';
  32.                         }
  33.                         else if(s[i]=='y')
  34.                         {
  35.                                 s[i]='z';
  36.                                 s[i+1]='a';
  37.                                 s[i+2]='b';
  38.                         }
  39.                         else if(s[i]=='z')
  40.                         {
  41.                                 s[i]='a';
  42.                                 s[i+1]='b';
  43.                                 s[i+2]='c';
  44.                         }
  45.                         i+=3;
  46.                 }
  47.                 else if(s[i]>='A' && s[i]<='W')
  48.                 {
  49.                         len+=2;
  50.                         for(j=len;j>i+2;j--)
  51.                                 s[j]=s[j-2];
  52.                         s[i]=s[i]+1;
  53.                         s[i+1]=s[i]+1;
  54.                         s[i+2]=s[i]+2;
  55.                         i+=3;
  56.                 }
  57.                 else if(s[i]>='X' && s[i]<='Z')
  58.                 {
  59.                         len+=2;
  60.                         for(j=len;j>i+2;j--)
  61.                                 s[j]=s[j-2];
  62.                         if(s[i]=='X')
  63.                         {
  64.                                 s[i]='Y';
  65.                                 s[i+1]='Z';
  66.                                 s[i+2]='A';
  67.                         }
  68.                         else if(s[i]=='Y')
  69.                         {
  70.                                 s[i]='Z';
  71.                                 s[i+1]='A';
  72.                                 s[i+2]='B';
  73.                         }
  74.                         else if(s[i]=='Z')
  75.                         {
  76.                                 s[i]='A';
  77.                                 s[i+1]='B';
  78.                                 s[i+2]='C';
  79.                         }
  80.                         i+=3;
  81.                 }
  82.         }
  83.         printf("%s\n",s);
  84. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
脸皮猴 + 1

查看全部评分

3 个回复

正序浏览
本帖最后由 戴文婷 于 2014-4-28 21:31 编辑
  1. /*
  2.     函数功能:根据传入的字符,产生一个加密字符串
  3. */
  4. void makeJiaMiTempString(char c,char *temp){
  5.    
  6.     // 初始化一个char型变量,作为基准数,来防止输入的字符为z这类末尾数时,加密字符串溢出产生乱码
  7.     char baseCode='a';
  8.     // 当传入值为小写时,基准数为‘a’,当传入值为大写时,基准数为'A'
  9.     if(c>='A'&&c<='Z'){
  10.        baseCode='A';
  11.     }
  12.         /*
  13.          (c-baseCode) ->找到传入字符是,a-z或A-Z中的第几个字母。
  14.          (第n个字母+n)%26 -如果+n后溢出,则%26防止溢出。
  15.          最后加基准数,恢复asc编码
  16.          */
  17.         char s[]={  (char)((c-baseCode+1)%26+baseCode),
  18.                     (char)((c-baseCode+2)%26+baseCode),
  19.                     (char)((c-baseCode+3)%26+baseCode),'\0'};
  20.         strcpy(temp, s);   
  21. }
复制代码


觉得好的帮忙点个支持~~给点鼓励~

评分

参与人数 1技术分 +1 收起 理由
脸皮猴 + 1

查看全部评分

回复 使用道具 举报
我提供我写的,楼上得我看了一下,好像是字符加密,并不是句子加密。
  1. //
  2. //  main.c
  3. //  测试题7
  4. //
  5. /*
  6. 编程实现对键盘输入的英文名句子进行加密。用加密方法为:当内容为英文字母时,用26字母中的其后三个字母代替该字母,若为其它字符时不变。比如245a95n加密后是245bcd95opq。(C语言)

  7. ----- 针对此题,26个字母中最后三个字母做了处理,使到z之后从a开始填补

  8. */
  9. #include <stdio.h>  //调用printf需要引用的头文件

  10. int main()
  11. {
  12.     int k;
  13.     while (k!=0)//定义k判断何时退出程序,用来实现加密多个句子
  14.     {
  15.     char str1[20],str2[50];
  16.         int i,j,n=0;
  17.         printf("请输入你想加密的字符串:\n");
  18.         scanf("%s",str1);
  19.         for(i=0;str1[i]!='\0';++i)
  20.         {
  21.                 if((str1[i]>='A'&&str1[i]<='W')||(str1[i]>='a'&&str1[i]<='w'))
  22.                         for(j=1;j<4;++j,++n)
  23.                                 str2[n]=str1[i]+j;
  24.                 else if((str1[i]>='X'&&str1[i]<='Z')||(str1[i]>='x'&&str1[i]<='z'))
  25.                 switch(str1[i]){
  26.                 case 'x':str2[n++]='y';str2[n++]='z';str2[n++]='a';break;
  27.                 case 'y':str2[n++]='z';str2[n++]='a';str2[n++]='b';break;
  28.                 case 'z':str2[n++]='a';str2[n++]='b';str2[n++]='c';break;
  29.                         case 'X':str2[n++]='Y';str2[n++]='Z';str2[n++]='A';break;
  30.                 case 'Y':str2[n++]='Z';str2[n++]='A';str2[n++]='B';break;
  31.                 case 'Z':str2[n++]='A';str2[n++]='B';str2[n++]='C';break;
  32.             }
  33.         else
  34.                 {
  35.             str2[n]=str1[i];
  36.             ++n;
  37.                 }
  38.                
  39.         }
  40.         str2[n]='\0';
  41.         printf("%s\n",str2);
  42.     printf("是否继续?继续请按( 0 ),退出请按其他键:");
  43.     scanf("%d",&k);
  44.     }
  45.    
  46.         return 0;
  47. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
脸皮猴 + 1

查看全部评分

回复 使用道具 举报
#include<stdio.h>
#include<stdlib.h>
main()
{
char ch;

printf("Please input a word:\n");
scanf("%c",&ch);
while(ch != 13)
{

if(('a' <= ch <= 'w')||('A' <= ch <= 'W'))
{
ch = ch + 3;
printf("%c",ch);

}
else
{
ch = ch - 23;
printf("%c",ch);

}
scanf("%c",&ch);
}

return 0;
}

评分

参与人数 1技术分 +1 收起 理由
脸皮猴 + 1

查看全部评分

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