该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
gets(szExpression);
// 中缀表达式转后缀表达式,结果保存在expression中
for (int i = 0; i < strlen(szExpression); i++)
{
if (isspace(szExpression[i])) // 空白字符
{
if (bFindBegin)
{
expression[num].type = 1;
expression[num].element.int_element = atoi(pbegin);
num++;
bFindBegin = false;
}
continue;
}
if (isdigit(szExpression[i])) // 数字字符
{
if (!bFindBegin)
{
pbegin = &szExpression[i];
bFindBegin = true;
}
continue;
}
c = szExpression[i];
if (c == '+' || c == '-' || c == '*' || c == '/' || c == '(' || c == ')') // 操作符字符
{
if (bFindBegin)
{
expression[num].type = 1;
expression[num].element.int_element = atoi(pbegin);
num++;
bFindBegin = false;
}
if (c != ')')
{
if (!isEmpty(pSymboolStack)) // 存在操作符
{
if (c == '(') // 直接入栈
push(pSymboolStack, c);
else {
do
{
char topElement = top(pSymboolStack);
if (compare(topElement, c) >= 0 && topElement != '(') // 优先级不低于c且栈顶不等于'(',则出栈
{
expression[num].type = 2;
expression[num].element.char_element = topElement;
num++;
pop(pSymboolStack);
}
else
break;
} while (!isEmpty(pSymboolStack));
// c入栈
push(pSymboolStack, c);
}
} // 不存在操作符,直接入栈
else
push(pSymboolStack, c);
}
else // c == ')'
{
while( (c =top(pSymboolStack)) != '(')
{
expression[num].type = 2;
expression[num].element.char_element = c;
num++;