求助!!!!!!!100分

LeaveDark LeaveDark 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
int Change(const char *S,char NUM[],int &len)//中缀表达式转后缀表达式
{
QStack<char> OP;
int i,j=0;
for (i = 0; i < strlen(S); i++)
{
switch (S[i])
{
case'+':
if(OP.isEmpty())
OP.push(S[i]);
else if (OP.top() == '*' || OP.top() == '/')//如果栈顶的运算符优先级比+高
{
NUM[j++] = OP.pop();//将优先级高的运算符出栈
i--;//目的是继续比较加号与OP栈中剩下的操作符的优先级的高低
}
else
OP.push(S[i]);
break;
case'-':
if('('!=S[i-1]&&0!=i)//如果负号前面不是左括号且符号不是表达式第一个元素
{
if(OP.isEmpty())//如果负号前面不是左括号且符号不是表达式第一个元素+如果存放运算符的栈是空的
{
OP.push(S[i]);
}//把符号压进OP栈中
else if (OP.top() == '*' || OP.top() == '/')//如果负号前面不是左括号且符号不是表达式第一个元素+若OP不空+栈中顶元素是乘号或除号
{
NUM[j++] = OP.pop();//将OP栈中顶元素赋值给输出的字符数组,NUM数组往后移一位
i--;
}
else//如果负号前面不是左括号且符号不是表达式第一个元素+若OP不空+栈中顶元素不是乘号或除号
{
OP.push(S[i]);
}
}
else//当减号是表达式的首元素e:-13+5或者减号当负号用时eg:1+(-4)
{
while ((S[i] >= '0'&&S[i] <= '9' )|| S[i] == '.'||('-'==S[i]&&(S[i-1]<'0'||S[i-1]>'9')))
{
NUM[j++] = S[i];
if('-'==S[i])
NUM[j++]='@';
i++;
}
i--;
NUM[j++] = '#'; //数字中的间隔符
}
break;




s[i]等于减号的时候 为什么下面红色语句还要来判断s[i]的取值啊 他这个判断语句不就是在s[i]等于减号的情况下才执行的吗???????
...全文

相关推荐

评论 6
收藏 已收藏
分享
返回顶部
LeaveDark
C++ 语言 65,214 成员 250,514 内容