一道简单密码翻译题的疑惑

在情报传递过程中,为了防止情报被截获,往往需要对情报用一定的方式加密,简单的加密算法虽然不足以完全避免情报被破译,但仍然能防止情报被轻易的识别。我们给出一种最简的的加密方法,对给定的一个字符串,把其中从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';才能过,这就很不合理了。

求大佬指教一下。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雾渐起

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值