C语言程序题(加密解密)

(1)加密:根据密钥(即移位位数,用户从键盘输入)将对应字符进行移位操作,输出密文;例如通过将字母按顺序推后n位起到加密作用,如果n=3,则将字母A换作字母D,将字母B换作字母E。X变成A,Y变成B,Z变成C,x变成a,y变成b,z变成c。 
(2)解密:输入密文后再输入移位位数则可输出明文
假如有这样一条指令: Can you come here
用替代密码加密后就成为: Fdq brx Frph khuh(来个详细解答)

#include <stdio.h>
#include <ctype.h>
void jiami(char *s,int n)
{for(;*s;s++)
   if(isalpha(*s))
     *s=*s%32+n>25?*s+n-26:*s+n;
}
void jiemi(char *s,int n)
{for(;*s;s++)
   if(isalpha(*s))
     *s=*s%32-n<1?*s+26-n:*s-n;
}
int main()
{ char s[200];
  int n;
  gets(s);
  scanf("%d",&n);
  jiami(s,n);
  puts(s);
  jiemi(s,n);
  puts(s);
  return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-01-04
#include<stdio.h>
#include<stdlib.h>
void Encrypt(char *p, int offset)
{
    char *q = p + strlen(p);
    offset %= 26;

    while(p != q){
        if(*p >= 'A' && *p <= 'Z'){
            *p += offset;
            if (*p > 'Z')
                *p -= 26;
        }else if(*p >= 'a' && *p <= 'z'){
            *p += offset;
            if(*p > 'z')
                *p -= 26;
        }
        p++;
    }
}

void Decrypt(char *p, int offset)
{
    char *q = p + strlen(p);
    offset %= 26;

    while(p != q){
        if(*p >= 'A' && *p <= 'Z'){
            *p -= offset;
            if (*p < 'A')
                *p += 26;
        }else if(*p >= 'a' && *p <= 'z'){
            *p -= offset;
            if(*p < 'a')
                *p += 26;
        }
        p++;
    }
}


int main()
{
    char s[] = "Can you come here";
    printf("%s\n", s);

    Encrypt(s, 3);
    printf("%s\n", s);

    Decrypt(s, 3);
    printf("%s\n", s);

    system("pause");
    return 0;
}

相似回答