|
8鱼币
有没有谁帮我看一下我写的代码哪里错了?它可以运行但运行的结果有问题,运行结果看图
在密码学中,恺撒密码是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。向后移动的位数就是密钥,例如,密钥 k=3,则每个字母都会向前移动 3位:a 会被替换为 d;b 会被替换成 e;依此类推。字母表末尾将回卷到字母表开头。于是,w 会被替换为 z,x 会被替换为 a。 请编写程序,要求输入密码和信息,然后京程序加密后输出密文,并设计解密程序对密文进行解密。
#include <stdio.h>
int main()
{
char P[1000];/*定义明文长度*/
char C[1000];/*定义密文长度*/
int K=3,i;
printf("Please input message:\n"); /*输入明文*/
gets(P); /* 接受明文*/
for(i=0;P[i]!='\0';i++)
{ /*逐个判断字母的大小*/
if(P[i]>='a'&&P[i]<='z') /*小写字母 */
{
C[i]=(P[i]-'a'+K)%26+'a';
}
else if(P[i]>='A'&&P[i]<='Z')/*大写字母 */
{
C[i]=(P[i]-'A'+K)%26+'A';
}
else
C[i]=' ';/*如果不是字母,转换为空格*/
}
printf("The Ciphertext is :\n%s\n",C);/*输出密文*/
printf("Enter a ciphertext:\n");
gets(C);
for(i=0;C[i]!='\0';i++)
{
if(C[i]>='a'&&C[i]<='z')
{
P[i]=(C[i]-'a'-K)%26+'a';
}
else if(C[i]>='A'&&C[i]<='Z')
{
P[i]=(C[i]-'A'-K)%26+'A';
}
else
{
P[i]=' ';
}
}
printf("The message is :\n%s\n",C);
return 0;
}
本帖最后由 梦回连营 于 2021-11-27 23:48 编辑
- #include <stdio.h>
- #include <string.h>
- int main()
- {
- char P[1000] = {'\0'};/*定义明文长度*/
- char C[1000] = {'\0'};/*定义密文长度*/
- int K = 3, i;
- printf("Please input message:\n"); /*输入明文*/
- gets(P); /* 接受明文*/
- for (i=0; P[i]!='\0'; i++){ /*逐个判断字母的大小*/
- if (P[i] >= 'a' && P[i] <= 'z') { /*小写字母 */
- C[i] = (P[i] - 'a' + K ) % 26 + 'a';
- }
- else if( P[i] >= 'A' && P[i] <= 'Z'){ /*大写字母 */
- C[i] = (P[i] - 'A' + K) % 26 + 'A';
- }
- else
- C[i]=' ';/*如果不是字母,转换为空格*/
- }
- printf("The Ciphertext is :\n%s\n",C);/*输出密文*/
- printf("Enter a ciphertext:\n");
- gets(C);
- strcpy(P, C);
-
- for (i = 0; C[i] != '\0' ; i++){
- if (C[i] >= 'a' && C[i] <= 'z'){
- P[i] = (26 + C[i] - 'a' - K ) % 26 + 'a';
- }
- else if ( C[i] >= 'A' && C[i] <= 'Z'){
- P[i] = (26 + C[i] - 'A' - K) % 26 + 'A';
- }
- else
- P[i]=' ';
-
- }
-
- printf("The message is :\n%s\n",P);
-
- return 0;
- }
复制代码
你的代码里还是有一些其他问题的,我帮你改进了一下。数组没有初始化,会出现乱码问题。如果第二次输入解码的密文长度小于第一次输入的明文长度,但是没有重置,所以会把多出来的明文输出的。用strcpy相当于覆盖重置一下。
|
-
最佳答案
查看完整内容
你的代码里还是有一些其他问题的,我帮你改进了一下。数组没有初始化,会出现乱码问题。如果第二次输入解码的密文长度小于第一次输入的明文长度,但是没有重置,所以会把多出来的明文输出的。用strcpy相当于覆盖重置一下。
|