Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
7644 | admin | 删除多余括号 | C++ | 运行出错 | 42 | 0 MS | 192 KB | 2031 | 2025-03-19 20:15:56 |
#include<stdio.h> //检测括号是否可以删除 int check(char s[], int left, int right) { int i; //下标 int leftCount; //左括号统计 //处理 ' -(a +|- b) ' if (s[left-1] == '-') { i = left; leftCount = 1; while (++i < right) { if (s[i] == '(') { leftCount++; } else if ((s[i] == '+' || s[i] == '-' ) && leftCount == 1) { return 0; } } } //处理 ' /(a +|-|*|/ b) ' if (s[left-1] == '/') { return 0; } //处理 ' +(a +|-|*|/ b) +|- ' if (s[left-1] != '*' && s[left-1] != '/' && s[right+1] != '*' && s[right+1] != '/') { return 1; } //处理 ' *(a *|/ b) +|-|*|/ ' i = left; leftCount = 1; while (++i < right) { if (s[i] == '(') { leftCount++; } else if ((s[i] == '*' || s[i] == '/' ) && leftCount == 1) { return 1; } } return 0; } //删除多余的括号 int delExcessBrackets(char s[], int index) { int left, right; while (s[index] != '\0') { if (s[index] == ')') //如果为右括号,返回下标 { return index; } if (s[index] == '(') //如果为左括号,找到右括号的下标 { left = index; index = right = delExcessBrackets(s, index+1); if (check(s, left, right)) //若检测结果为可以删除,那么把括号位置换成空 { s[left] = s[right] = ' '; } } index++; } } int main() { char exp[256]; scanf("%s", exp); delExcessBrackets(exp, 0); int i = -1; while (exp[++i] != '\0') { if (exp[i] != ' ') { printf("%c", exp[i]); } } return 0; }