代码在Java中可以正常工作,但在C中的某些测试用例中,相同的代码将失败

瓦萨苏拉

我当时在练习算法问题,这是在HackerRank网站上进行的,我首先用C语言提交了我的代码,但是我得到了一些错误的测试用例。我认为我的逻辑是正确的,所以我将代码移植到Java,并通过了所有测试用例。

链接到问题定义: https : //www.hackerrank.com/challenges/caesar-cipher-1

这是我在C中的代码:

    int main(){
    int n; 
    scanf("%d", &n);
    char* s = (char *)malloc(n * sizeof(char));
    scanf("%s", s);
    int k; 
    scanf("%d", &k);
        k = k % 26;
    for(int i = 0; i < n; i++){
        if(s[i] >= 65 && s[i] <= 90){
            s[i] += k;
            if(s[i] > 90){
                s[i] = s[i] - 90 + 64;
            }
        }
        if(s[i] >= 97 && s[i] <= 122){
            s[i] += k;
            if(s[i] > 122){
                s[i] = s[i] - 122 + 96;
            }
        }
    }
    printf("%s", s);
    return 0;
}

在此处输入图片说明

这是我的Java代码:

public class Solution {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        String str = br.readLine();
        int K = Integer.parseInt(br.readLine());
        K %= 26;
        for(int i = 0; i < N; i++){
            char c = str.charAt(i);
            if(c >= 65 && c <= 90){
                c += K;
                if(c > 90){
                    c = (char)(c - 90 + 64);
                }
            }
            if(c >= 97 && c <= 122){
                c += K;
                if(c > 122){
                    c = (char)(c - 122 + 96);
                }
            }
            System.out.print(c);
        }
    }
}

在此处输入图片说明

我的两个解决方案都通过了样本测试用例,逻辑都一样。我不明白为什么在某些测试用例中它会在C中显示W / A。

PS:这是练习题解决方案,而不是现场比赛解决方案。

尤金·舒(Eugene Sh。)

C字符串以'\0'附加在其末尾的特殊字符结尾。因此,实际字符串的字符总是1比可见文本长。您没有为输入字符串null终止符分配内存:替换

char* s = (char *)malloc(n * sizeof(char));

char* s = malloc(n * sizeof(char) + 1);

甚至

char* s = malloc(n + 1);

sizeof(char)所保证的那样1

另外,这些行会出现问题:

if(s[i] >= 97 && s[i] <= 122){
            s[i] += k;

s[i]可能122并且k可能会比5作为s[i]最有可能签约char的类型,而且可能溢出过去的价值127,这是最大的签署char有符号整数溢出具有未定义的行为

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C程序中的多个测试用例无法正常工作

为什么我的逻辑在某些测试用例中失败了?

Junit测试用例中的代码可重用性

我的代码中某个测试用例的奇怪行为

NodeJs测试用例在数组的forEach方法中的代码

如何在Google Code Jam中的C ++代码中输入测试用例

测试用例在chrome中失败

如何解析JUnit结果xml文件并在java代码中获取测试用例?

将代码从Objective-C转换为Swift后,测试用例失败

在Rails代码中使用SimpleCov在MiniTest中获取所有错误和失败的测试用例

在setupFilesAfterEnv模式下测试用例失败,但在setupFiles模式下可以与玩笑+酶反应正常

为什么相同的Scala代码在命令行中可以正常工作而在Intellij中却不能正常工作?

框架上的UI自动化代码在Chrome / MSEdge中工作正常,但在Firefox和Safari中失败

即使 SOAP UI 中的测试用例在继续之前清理失败,如何调用某些步骤?

查询在查询浏览器中工作正常,但在python代码中却无法正常工作

我可以在Robot Framework中按测试用例重新运行失败的测试吗?

具有相同数据类型代码的相同逻辑代码在Java中传递,但在C ++中传递?

在测试套件中重新运行失败的测试用例

在相同的测试用例或单独的测试用例中测试默认值和设置器

单击确定,可以从XCTest中的其他测试用例中调用测试用例

为什么深度测试在我的代码中无法正常工作?

我在哪里可以将ACTION_UP放在代码中,这样可以正常工作?

为什么在测试用例中测量代码覆盖率?

为什么我在 Jasmine 测试用例中没有得到状态代码?

如何在此代码挑战中获得此测试用例的结果?

一些测试用例中python 3代码的运行时错误

为什么我的Javascript代码无法在Chai中通过单元测试用例

在Ghost Leg代码挑战的一些测试用例中未通过

为什么不通过代码战中问题平衡数的所有测试用例?