所以,关于如何制作一个基本的计算器(它只有运算符+-,以及()括号),存在一个问题.由于某些原因,代码在Leetcode上给出了不正确的输出,而在线编译器使用相同的测试用例给出了正确的输出.这里的问题可能是什么?

我的代码(在Leetcode上):

int pos = 0;

int calculate(char *s) {
    int sign = 1;
    int sum = 0;
    int len = strlen(s);
    while (pos < len && s[pos] != ')') {
        if (s[pos] == '-') {
            sign = -1;
            printf("-\n");
        }
        else if (s[pos] == '+') {
            sign = 1;
            printf("+\n");
        }
        else if (s[pos] == '(') {
            pos++;
            sum += sign * calculate(s);
            printf("%d\n", sum);
        } else {
            int a = s[pos] - 48;
            if (a >= 0 && a < 10) {
                sum = sum + a * sign;
                printf("%d\n", sum);
            }
        }
        pos++;
    }
    return sum;
}

编译器上的代码(添加了一个main函数来调用函数calculate):

// Online C compiler to run C program online
#include <stdio.h>

int pos = 0;

int calculate(char *s) {
    int sign = 1;
    int sum = 0;
    int len = strlen(s);
    while (pos < len && s[pos] != ')') {
        if (s[pos] == '-') {
            sign = -1;
            printf("-\n");
        }
        else if (s[pos] == '+') {
            sign = 1;
            printf("+\n");
        }
        else if (s[pos] == '(') {
            pos++;
            sum += sign * calculate(s);
            printf("%d\n", sum);
        } else {
            int a = s[pos] - 48;
            if (a >= 0 && a < 10) {
                sum = sum + a * sign;
                printf("%d\n", sum);
            }
        }
        pos++;
    }
    return sum;
}

int main() {
    printf("\n\nResult: %d", calculate(" (2-1 + 2 -(2+2))+8"));
    return 0;
}

Leetcode处理全局变量的方式有问题吗? 测试用例使用:

输入:s = "1 + 1"
输入:s = " 2-1 + 2 "
输入:s = "(1+(4+5+2)-3)+(6+8)"

在所有这些测试用例中,在线编译器给出了准确的输出,而Leetcode只对第一个给出了正确的输出

推荐答案

我猜一猜:

...Leetcode很可能只是重复调用您的函数,而不是一遍又一遍地启动某个程序

- 不神圣的绵羊

我建议您在不使用全局变量的情况下实现代码;也许这样可以消除错误.

C++相关问答推荐

你能用自己的地址声明一个C指针吗?

如何使用Python C API实现多线程程序?

手动矢量化性能差异较大

Malloc(sizeof(char[Length]))是否不正确?

为什么即使在强制转换时,此代码也会溢出?

在循环中复制与删除相同条件代码的性能

插座打开MacOS组件

是否定义了此函数的行为?

`预期说明符-限定符-列表在‘(三元运算符中的’token`‘之前

如何修复我的qsort()算法?它每次都给出不同的结果

被调用方函数内部的C-Struct变量,它是指针还是无关紧要

Malloc和对齐

如果类型是新的,offsetof是否与typeof一起工作?

atoi函数最大长-长误差的再创造

x86-64平台上的int_fast8_t大小与int_fast16_t大小

为什么 Linux 共享库 .so 在内存中可能比在磁盘上大?

为什么 C 字符串并不总是等同于字符数组?

段错误try 访问静态字符串,但仅有时取决于构建环境

我怎样才能用c语言正常运行这两个进程?

如何在 C 中编辑 struct 体中的多个变量