#include<stdio.h> ? void encode(char str[])//str为明文 { ?? char a[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; ?? char A[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}; ?? int i=0,k,m;//k记录此字母偏移程度,如a偏移为0 ,b的偏移为1,c的偏移为2,以此类推 ?? for(i=0;str[i]!='\0';i++) ?? { ? ??? ?if(str[i]>='a'&&str[i]<='z')//明文中的小写 ?? ??? { ?? ?? ??? ?k=str[i]-97;//取一下偏移量 ?? ?? ??? ?m=(k+3+26)%26;//后移3位 ?? ???? str[i]=A[m];//转换 ?? ??? ?} else if(str[i]>='A'&&str[i]<='Z')//明文中的大写 ?? ??? ?{ ?? ??? ?k=str[i]-65; ?? ??? ?m=(k-2+26)%26;//前移2位 ,加个26为了避免 m成为负数,有那个循环数组的感觉 ?? ??? ?str[i]=a[m]; ?? ??? ?} ?? ?} ?? ? } void decode(char str1[]) { ?? ? ?? ?char a[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; ?? char A[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}; ?? int i=0,k,m;//k记录此字母偏移程度,如a偏移为0 ?? for(i=0;str1[i]!='\0';i++) ?? { ? ??? ?if(str1[i]>='a'&&str1[i]<='z')//明文中的小写 ?? ??? { ?? ?? ??? ?k=str1[i]-97;//取一下偏移量 ?? ?? ??? ?m=(k+2+26)%26;//后移3位 ? ?? ???? str1[i]=A[m];//转换 ?? ??? ?} else if(str1[i]>='A'&&str1[i]<='Z')//明文中的大写 ?? ??? ?{ ?? ??? ?k=str1[i]-65; ?? ??? ?m=(k-3+26)%26;//前移2位 ?? ??? ?str1[i]=a[m]; ?? ??? ?} ?? ?} ?? ? } int main() { ??? char b[100]; ??? char c[100]; ?? ? printf("输入你的明文:"); ?? ? gets(b); ?? ? encode(b); ?? ? printf("加密后:"); ?? ? puts(b); ?? ? ?? ? ?? ? printf("请输入你的密文:"); ?? ? gets(c); ?? ? decode(c); ?? ? printf("解密后:"); ?? ? puts(c); ?? ? return 0; ?? ? ?? ? ?}
|