去除多余括号的算法

来源:百度知道 编辑:UC知道 时间:2024/05/06 01:34:11
键盘输入一个含有括号的四则运算表达式,可能含有多余的括号,编程整理该表达式,去掉所有多余的括号,原表达式中所有变量和运算符相对位置保持不变,并保持与原表达式等价。

例如:
a+(b+c)----->a+b+c
(a*b)+c/d--->a*b+c/d
a+b/(c-d)--->a+b/(c-d)

c++的, 不检查括号匹配,只处理小括号 不能含有 空格 : ;

void RemoveRedundancyBrackets(char* szSrc)
{
if (NULL == szSrc)
return;

int len = strlen(szSrc) - 1;
int i;
int j;
for (i = 1; i < len; i++)
{
if (')' == szSrc[i])
{
for (j = i - 1; j > 0; j--)
{
if ('(' == szSrc[j])
{
if (')' == szSrc[i + 1] && '(' == szSrc[j - 1])
{
szSrc[i] = ' ';
szSrc[j] = ' ';
}
else
{
szSrc[i] = ':';
szSrc[j] = ';';
}
break;
}
}
}
}

if (')' == szSrc[len])
{
j = 1;
for (i = len - 1; i >= 0; i--)
{
if ('(' == szSrc[i])
{
j = i;
break;
}
}
if (j == 0)
{
szSrc[0] = ' ';
szSrc[len] = '\0';
}
}

char *buffer = new char[le