該樓層疑似違規已被系統折疊?隱藏此樓查看此樓
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++;