一个关于c语言的非常简单的题目之密码翻译(本人真是太愚钝)希望大佬来帮帮忙

在情报传递过程中,为了防止情报被截获,往往需要对情报用一定的方式加密,简单的加密算法虽然不足以完全避免情报被破译,但仍然能防止情报被轻易的识别。我们给出一种最简的的加密方法,对给定的一个字符串,把其中从a-y,A-Y的字母用其后继字母替代,把z和Z用a和A替代,其他非字母字符不变,则可得到一个简单的加密字符串。

格式

输入格式

输入一行,包含一个字符串,长度小于80个字符。

输出格式

输出每行字符串的加密字符串。

样例

输入样例

Hello! How are you!

输出样例

Ifmmp! Ipx bsf zpv!

限制

时间限制:1000 ms

内存限制:65536 KB

提示

由于windows和linux下面的换行符不同,所以读入一行字符推荐使用fgets或者gets函数;尽量避免使用getchar读入,后者需要自行解决跨平台问题。

然后以下是我写的,我找不到哪里错了,但是我的作业提交系统中只给了80分。球球各位带佬辣!!!

#include<stdio.h> #

include<string.h>

int main()

{

char a[1000];

gets(a);

int i=0;

int len=strlen(a);

for(i=0;i<=len-1;i++)

{

if((a[i]<'A')||('Z'<a[i]&&a[i]<'a')||(a[i]>'z'))

a[i]=a[i]+0;

else a[i]=a[i]+1;

printf("%c",a[i]);

}

return 0;

}

又几个方面可以改进:

1) 用下表访问需要计算地址,比用指针慢。

2)用指针就可以不需要for循环而用while,就可以省去for循环里的变量i的计算。

3)不用求strlen,而用字符串结尾è'\0'结束循环。

4)一个一个字符输出,每个字符调用一次函数,太慢。加密完后争锋字符串输出就好了。

 

#include<stdio.h> 

int main()

{
    char a[1000];
    printf("Please enter original string (letters only, lower case or upper case):\n");
    gets(a);

    char *p = a;
    while (*p)
    {
        if (*p == 'z' || *p == 'Z')
            *p -= 25;
        else if (*p >= 'a' && *p < 'z' || *p >= 'A' && *p < 'Z')
            ++*p;
        ++p;
    }

    printf("Encrypted string:\n%s\n", a);
    return 0;
}

// Output
Please enter original string (letters only, lower case or upper case):                                                                                                             
Hello! How are you!                                                                                                                                                                
Encrypted string:                                                                                                                                                                  
Ifmmp! Ipx bsf zpv!                                                                                                                                                                

附注:求赞助积分和C币。加入CSDN将近20年了。最近几年忙小孩没登录。刚才搜索到一本电子书想下载,需要20积分/C币。已经收到8元了,还差12元。赞助多少都可以。多谢。

#include<stdio.h> 
#include<string.h>

int main()

{
	char a[1000] = { 0 };

	gets_s(a, _countof(a));

	for (int i = 0; i < strlen(a); i++)
	{
		if (((a[i] >= 'A') && (a[i] < 'Z')) || ((a[i] >= 'a') && (a[i] < 'z')))
		{
			a[i] += 1;
		}
		else if (('z' == a[i]) || ('Z' == a[i]))
		{
			a[i] -= ('z' - 'a');
		}
	}

	printf("%s\n", a);

	return 0;
}

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y