Miracle-Lin 2024-10-12 21:03 采纳率: 0%
浏览 2

不知道凯撒加密的C语言代码哪里不对

题目:不知道写凯撒加密的C语言哪里出错了

img

img

代码:


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

img

不知道代码哪里错了,最终运行评测的结果只有两个是对的,求解答

  • 写回答

1条回答 默认 最新

  • 香格里辣 2024-10-12 21:36
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    从您提供的代码和题目描述来看,您的代码大致正确,但可能存在一些小问题。我会为您指出可能的问题并提供修正建议。

    1. 在读取字符串时,应该使用scanf("%s", a);而不是scanf("%s",&a);。因为a已经是一个字符数组(字符串)的指针,不需要再取地址。
    2. 对于字母的加密部分,当偏移量n为正时,应该向后移动(加密);当n为负时,应该向前移动。您的代码逻辑与此相符。
    3. 对于数字的加密部分,您的代码逻辑也是正确的。当n为正时,数字会增加;当n为负时,数字会减少。但是需要注意,数字字符的ASCII码值与数字本身是不同的,因此需要正确地转换和处理。

    基于以上分析,修正后的代码如下:

    #include<stdio.h>
    #include<string.h>
    
    int main() {
        int n;
        char a[1001], b[1001];  // 字符串长度加1以容纳结束符'\0'
        scanf("%d", &n);  // 读取偏移量n
        scanf("%s", a);  // 读取待处理的字符串
        int i;
        for (i = 0; a[i] != '\0'; i++) {
            if (a[i] >= '0' && a[i] <= '9') {
                b[i] = '0' + ((a[i] - '0' + n) % 10);  // 处理数字字符的加密
            } else if (a[i] >= 'a' && a[i] <= 'z') {
                b[i] = 'a' + ((a[i] - 'a' + n + 26) % 26);  // 处理小写字母的加密(注意:向后移动时需要加上循环的长度)
            } else if (a[i] >= 'A' && a[i] <= 'Z') {
                b[i] = 'A' + (a[i] - 'A' + n) % 26;  // 处理大写字母的加密(不需要加循环长度)
            } else {
                b[i] = a[i];  // 其他字符保持不变
            }
        }
        b[i] = '\0';  // 添加字符串结束符'\0'
        printf("%s", b);  // 输出处理后的字符串
        return 0;
    }
    

    这个修正后的代码应该可以解决您的问题。希望对您有帮助!

    评论

报告相同问题?

问题事件

  • 创建了问题 10月12日