关于#ACM题#的问题,如何解决?(语言-c语言)

ACM题目
为什么代码只可以通过数据小的测试,当输入的数字较大时,就会出现乱码,如何改正能通过测试

img

img

img

题目说是不超过50个字符,但是包括50,所以申请空间的时候要大一些,char a[50]改成 char a[55].
另外,char类型的范围最大到127,所以'z'+25这种回导致越界,代码修改如下:

#include <stdio.h>
#include <string.h>
int main()
{
    char a[55]={0};
    int n;
    int i;
    scanf("%d", &n);
    scanf("%s", a);
    n = n % 26;
    for (i = 0; i < strlen(a); i++)
    {
        if (a[i] + n <= 'z')
            a[i] = a[i] + n;
        else
        {
            a[i] = a[i] + (n - 26);
        }
    }
    printf("%s", a);
    return 0;
}

修改如下,供参考:

#include <stdio.h>
int main()
{
    char str[51];
    int  n, i;
    scanf("%d", &n);
    getchar();
    gets(str);
    for (i = 0; str[i]; i++)
    {
        if (str[i] >= 'A' && str[i] <= 'Z')
            str[i] = (str[i] - 'A' + n) % 26 + 'A';
        else if (str[i] >= 'a' && str[i] <= 'z')
            str[i] = (str[i] - 'a' + n) % 26 + 'a';
    }
    printf("%s", str);
    return 0;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632