凯撒密码,又称移位密码,就是将字母按照一定的移位个数进行移位,形成密码表,然后再按此表进行加解密。凯撒密码的密钥是一个整数,即移位个数。请编写程序,可以通过输入密钥(也就是移位个数,一个小于26的正整数)生成并输出对应密码表,然后对用户输入的明文进行加密输出,不是字母的不用改动。
代码一:
#include <cstdio>
#include <string.h>
#include <iostream>
using namespace std;
void jiami(char a[], int k) {
for(int i = 0; i < strlen(a); i++) {
if(a[i] <= 'z' && a[i] >= 'a') {
cout << (char)(((a[i] - 'a') + k) % 26 + 'a') ;
}else if(a[i] <= 'Z' && a[i] >= 'A') {
cout << (char)(((a[i] - 'A') + k) % 26 + 'A');
}else {
cout << a[i];
}
}
}
int main() {
char a[100];
int k;
cout << "请输入移位个数:";
cin >> k;
cout << "请输入待加密的明文:";
cin >> a;
cout << "加密后的密文为:";
jiami(a, k) ;
return 0;
}
代码二:
#include <stdio.h>
int main(){
int n;
printf("请先输入移位:");
scanf("%d", &n);
printf("请输入一行要加密字符:");
getchar(); //吸收掉末尾的换行符
char c;
while((c = getchar()) != '\n') {
if((c >= 'A' && c <= 'Z')||(c >= 'a' && c <= 'z')) { //不是英文字母的原样输出
c = c + n; //是英文字母就要移位
if(c > 'Z' && c <= 'Z'+n||c > 'z')
c = c - 26;
}
printf("%c", c);
}
printf("\n");
return 0;
}