C语言编写凯撒加密(简单版的),网上搜到的那个大哥200多行代码用不着……
输入待加密的消息:Go ahead, make my day.
输入移位数:3
加密后的消息: Jr dkhdg, pdnh pb gdb.
注意:当用户输入26与移位计数的差值时,程序可以对消息进行解密:
输入待解密的消息: Jr dkhdg, pdnh pb gdb.
输入移位数:23
加密后的消息: Go ahead, make my day.
可以假定消息的长度不超过80个字符。不是字母的那些字符不要改动。此外,加密时不要改变字母的大小写。
提示:为解决前面的绕回问题,要以用表达式((ch-'A')+n)%26+'A'计算大写字母的密码,其中ch存储字母,n存储移位计数。(小写字母也需要一个类似的表达式。) 展开
int jiami(char str[],int len)
{
for(int i=0;i<len;i++)
{
if(!isalpha(str[i]))// 判断是否为字符
{
str[i]=str[i]+3;
if(str[i]>'Z'&&str[i]<'a')str[i]=str[i]-'Z'+'A'-1;//控制X,Y,Z回到A,B,C
if(str[i]>'z')str[i]=str[i]-'z'+'a'-1;//控制x,y,z回到a,b,c
}
}
return 1;
}
这是我写的,已经可以用了,你试试
ctype salpha是什么意思?
ctype是处理字符用的头文件,应为后面我使用了isalpha()函数,所以需要这个头文件!该函数的意思是判断a[i]是不是字母
#include <stdio.h>
#include<ctype.h>
#define N 40
int read_line(char sen1[], int n);
void encrypt(char sen1[], char sen2[], int i, int n);
void print_arr(char sen[], int i);
int main() {
char sen1[N], sen2[N];
int i;
i = read_line(sen1, N);
print_arr(sen1, i);
encrypt(sen1, sen2, i, 3);
print_arr(sen2, i);
}
int read_line(char sen1[], int n) {
char ch;
int i;
for(i = 0; i < n-1; i++){
ch = getchar();
if (ch != '\n') {
sen1[i] = ch;
}
else break;
}
return i-1;
sen1[i] = '\0';
}
void encrypt(char sen1[], char sen2[], int i, int n) {
int j;
for (j = 0; j <= i; j++) {
if (islower(sen1[j]))
sen2[j] = 'a' + (sen1[j] - 'a' + n) % 26;
else if (isupper(sen1[j]))
sen2[j] = 'A' + (sen1[j] - 'A' + n) % 26;
else sen2[j] = sen1[j];
}
}
void print_arr(char sen[], int i) {
int j;
for (j = 0; j <= i; j++) {
printf("%c", sen[j]);
}
printf("\n");
}