在情报传递过程中,为了防止情报被截获,往往需要对情报用一定的方式加密,简单的加密算法虽然不足以完全避免情报被破译,但仍然能防止情报被轻易的识别。我们给出一种最简的的加密方法,对给定的一个字符串,把其中从a-y,A-Y的字母用其后继字母替代,把z和Z用a和A替代,其他非字母字符不变,则可得到一个简单的加密字符串。
输入一行,包含一个字符串,长度小于80个字符。
输出每行字符串的加密字符串
#include <stdio.h>
#include <string.h>
//注意到可能会含有空格 用fgets控制输入
int main(int argc, char const *argv[]){
char a[81]={'\0'};
fgets(a,sizeof(a),stdin);
int k=strlen(a);
// if(k!=80)
// a[k-1]='\0';
//for循环遍字符串,用acs码限制字符为大小写字母
//如果是a-y则加1;如果是z/Z 就减25获得对应的a/A
for(int i=0;i<k;i++){
int j=a[i];
if((j>=65&&j<=90)||(j>=97&&j<=122)){
if(j==90||j==122)
a[i]-=25;
else
a[i]+=1;
}
}
printf("%s",a);
return 0;
}
因为openjudge上不允许gets()函数,而scanf又不允许输入的字符串含有空格,所以我只能用fgets()控制输入了QAQ。
虽然题目很简单,我还是有一个疑问,gets()输入的时候如果字符串的长度比字符数组小至少2个字节的时候会自动加上换行符\n,和结束符\0,如果只少了一个字节那么只加上结束符。
因为我初始化数组为81个字节,所以我进行了一个判断:除了k=80时的情形我都会将它转化为\0,避免输出的时候会出现空格。
但是最后我提交的时候发现只有注释掉 if(k!=80) a[k-1]='\0';才能过,这就很不合理了。
求大佬指教一下。