提交时间:2025-03-19 20:15:56

运行 ID: 7644

#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; }