#include <string.h>
void fun(char *s, char *c, int k)
{
int i;
for(i=0; s[i]!='\0'; i++)
{
if(s[i]>='a' && s[i]<='z')
c[i]=(s[i]+k)>'z'?s[i]+k-26:s[i]+k;
else if (s[i]>='A' && s[i]<='Z')
c[i]=(s[i]+k)>'Z'?s[i]+k-26:s[i]+k;
else c[i]=s[i];
}
c[i]='\0';
}
void main()
{ char s[100]; /* 定义明文长度 */
char c[100]; /* 定义密文长度 */
int k;
printf("Please input Secret Key:\n");
scanf("%d", &k);getchar();
printf("Please input Plaintext:\n");
gets(s);
fun(s,c,k);
printf("The Ciphertext is : \n%s\n", c);
getchar();
}
凯撒密码加密:通过将字母表向后移动一定位置实现加密,其中26字母循环使用(z后面时a,Z后面时A)
逻辑:
1.遍历输入字符串,遍历到字符串最后一个字符‘\0’,退出for循环
2.for循环内部判断字符串每一个字符加上k(向后移动多少个字符)后,是否大于'z'或'Z'
3.不大于,则将s[i]+k赋给c[i] ; 大于,则再减去26,以此实现26字母循环
最后c[i]=‘\0’,i++是后置++,当最后一个字母加密后,i的值加1,此时c[i]是最后一个字符的位置,为构建一个完整的字符串,需要令c[i]=‘\0’
实现效果:
k设置为3,即:把每一个字符都在字符表中向后移动3位