所以,关于如何制作一个基本的计算器(它只有运算符+-,以及()括号),存在一个问题.由于某些原因,代码在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++相关问答推荐

如何使fputs功能提示错误输入并要求用户重新输入.程序停止而不是请求新的输入

如果我释放其他内容,返回值就会出错

如何调试LD_PRELOAD库中的构造函数?

在C++中头文件中声明外部 struct

Linux不想运行编译后的文件

致命错误:ASM/rwan ce.h:没有这样的文件或目录.符号链接还不够

如何用C语言为CLI应用程序编写按键检测系统?

如何将C中的两个字符串与从文件接收的字符串中的字符数进行比较

试图创建一个基本的Word克隆,但遇到了障碍

Printf()在C中打印终止字符之后的字符,我该如何解决这个问题?

如果格式字符串的内存与printf的一个参数共享,会发生什么情况?

int * 指向int的哪个字节?

用C++高效解析HTTP请求的方法

当我将偏移量更改为任何非零值时,C中的mmap共享内存出现无效参数错误

WSASocket在哪里定义?

C Makefile - 如何避免重复提及文件名

GDB 用内容初始化数组

全局变量 y0 与 mathlib 冲突,无法编译最小的 C 代码

我们可以在不违反标准的情况下向标准函数声明添加属性吗?

CS50 PSET反射滤波器