帮我把下面c语言转为Qt代码char e; SqStack *Optr;//定义运算符栈指针 InitStack(Optr);//初始化运算符栈 int i=0;//i作为postexp的下标 while(*exp!='\0')//exp表达式未遍历完时循环 { switch(*exp) { case'('://判定为左括号 Push(Optr,'(');//左括号进栈 exp++;//继续遍历其他字符 break; case')'://判定为右括号 Pop(Optr,e);// 出栈元素e while(e!='(')//不为'('时循环 { postexp[i++]=e;//将e存放到postexp中 Pop(Optr,e);//继续出栈元素e } exp++;//继续遍历其他字符 break; case'+'://判定为加号或减号 case'-': while(!StackEmpty(Optr))//栈不空时循环 { GetTop(Optr,e);//取栈顶元素e if(e!='(')//e不是'(' { postexp[i++]=e;//将e存放到postexp中 Pop(Optr,e);//出栈元素e } else break; } Push(Optr,*exp);//将'+'或'-'进栈 exp++;//继续遍历其他字符 break; case'*'://判定为乘号或除号 case'/': while(!StackEmpty(Optr))//栈不空时循环 { GetTop(Optr,e);//取栈顶元素e if(e=='*'||e=='/')//将栈顶'*'或'/'运算符出栈并存放到postexp中 { postexp[i++]=e;//将e存放到postexp中 Pop(Optr,e);//出栈元素e } else break; } Push(Optr,*exp);//将'*'或'/'进栈 exp++;//继续遍历其他字符 break; default://处理数字字符 while(*exp>='0'&&*exp<='9') { postexp[i++]=*exp; exp++; } postexp[i++]='#';//用#标识一个数字串结束 } } while(!StackEmpty(Optr))//exp遍历完毕,栈不空时循环 { Pop(Optr,e);//出栈元素e postexp[i++]=e;//将e存放到postexp中 } postexp[i]='\0';//给postexp表达式添加结束标识 DestroyStack(Optr);//销毁栈
时间: 2023-09-12 17:06:29 浏览: 137
把C语言代码转为Qt代码需要先包含头文件,然后使用Qt的数据类型和函数。下面是使用Qt的代码:
```cpp
QChar e;
QStack<QChar> *Optr; // 定义运算符栈指针
Optr = new QStack<QChar>(); // 初始化运算符栈
int i = 0; // i作为postexp的下标
while (!exp->isEmpty()) // exp表达式未遍历完时循环
{
switch (exp->front().toLatin1())
{
case '(' : // 判定为左括号
Optr->push('('); // 左括号进栈
exp->remove(0, 1); // 继续遍历其他字符
break;
case ')' : // 判定为右括号
Optr->pop(&e); // 出栈元素e
while (e != '(') // 不为'('时循环
{
postexp[i++] = e; // 将e存放到postexp中
Optr->pop(&e); // 继续出栈元素e
}
exp->remove(0, 1); // 继续遍历其他字符
break;
case '+' : // 判定为加号或减号
case '-' :
while (!Optr->isEmpty()) // 栈不空时循环
{
Optr->top(&e); // 取栈顶元素e
if (e != '(') // e不是'('
{
postexp[i++] = e; // 将e存放到postexp中
Optr->pop(&e); // 出栈元素e
}
else
break;
}
Optr->push(exp->front()); // 将'+'或'-'进栈
exp->remove(0, 1); // 继续遍历其他字符
break;
case '*' : // 判定为乘号或除号
case '/' :
while (!Optr->isEmpty()) // 栈不空时循环
{
Optr->top(&e); // 取栈顶元素e
if (e == '*' || e == '/') // 将栈顶'*'或'/'运算符出栈并存放到postexp中
{
postexp[i++] = e; // 将e存放到postexp中
Optr->pop(&e); // 出栈元素e
}
else
break;
}
Optr->push(exp->front()); // 将'*'或'/'进栈
exp->remove(0, 1); // 继续遍历其他字符
break;
default : // 处理数字字符
while (exp->front().isDigit())
{
postexp[i++] = exp->front(); // 将数字字符存放到postexp中
exp->remove(0, 1);
}
postexp[i++] = '#'; // 用#标识一个数字串结束
break;
}
}
while (!Optr->isEmpty()) // exp遍历完毕,栈不空时循环
{
Optr->pop(&e); // 出栈元素e
postexp[i++] = e; // 将e存放到postexp中
}
postexp[i] = '\0'; // 给postexp表达式添加结束标识
delete Optr; // 销毁栈
```
阅读全文