MFC表达式求值问题
答案:2 悬赏:50
解决时间 2021-01-21 16:13
- 提问者网友:杀生予夺
- 2021-01-20 17:14
MFC表达式求值问题
最佳答案
- 二级知识专家网友:冷風如刀
- 2021-01-20 17:37
int MidToBack(char *tPtr)
{
Stack s;
char *tChar = tPtr;
int tRet;
int i=0;
char tSave[MAXSIZE];
bool uNumber = false;
//检测首字符是否为负数
if(*tChar == '-')
{
tSave[i] = *tChar;
++i;
++tChar;
goto Number;
}
while(*tChar)
{
if(*tChar == ' ')
{
++tChar;
continue;
}
else if(::isdigit(*tChar))
{
Number:
while((*tChar >= '0') && (*tChar <= '9'))
{
tSave[i] = *tChar;
++i;
++tChar;
}
if(*tChar == '.')
{
tSave[i] = *tChar;
++i;
++tChar;
while((*tChar >= '0') && (*tChar <= '9'))
{
tSave[i] = *tChar;
++i;
++tChar;
}
// --tChar;
}
--tChar;
tSave[i] = ' ';
++i;
}
else if((*tChar == '+') || (*tChar == '-') || (*tChar == '*')||
(*tChar == '/') || (*tChar == '(') || (*tChar == ')')||
(*tChar == '[') || (*tChar == ']') || (*tChar == '{')||
(*tChar == '}'))
{
if(s.IsEmpty() || *tChar == '{' || *tChar == '[' || *tChar == '(')
{
s.Push(*tChar);
if(*(tChar+1) == '-')
{
++tChar;
tSave[i] = *tChar;
++i;
++tChar;
goto Number;
}
}
else
{
//对特殊字符的处理例如'}'']'')'
if((*tChar == '}') || (*tChar == ']') || (*tChar == ')'))
{
char tTemp;
switch(*tChar)
{
case ')':tTemp='(';
break;
case ']':tTemp='[';
break;
case '}':tTemp='{';
break;
default:
break;
}
while(tTemp != s.Top())
{
tSave[i] = s.Top();
++i;
tSave[i] = ' ';
++i;
s.Pop();
}
s.Pop();
}
else //对特殊字符的处理例如'+''-''*''/'
{
tRet = Judge(s.Top(),*tChar);
if(tRet == 1)
{
s.Push(*tChar);
}
else
{
tSave[i] = s.Top();
++i;
tSave[i] = ' ';
++i;
s.Pop();
s.Push(*tChar);
}
}
}
}
else
{
cout<<"输入出错\n";
return -1;
}
tChar++;
}
while(!s.IsEmpty())
{
tSave[i] = s.Top();
++i;
tSave[i] = ' ';
++i;
s.Pop();
}
strncpy(tPtr, tSave, i);
tPtr[i] = '#';
return 1;
}
{
Stack
char *tChar = tPtr;
int tRet;
int i=0;
char tSave[MAXSIZE];
bool uNumber = false;
//检测首字符是否为负数
if(*tChar == '-')
{
tSave[i] = *tChar;
++i;
++tChar;
goto Number;
}
while(*tChar)
{
if(*tChar == ' ')
{
++tChar;
continue;
}
else if(::isdigit(*tChar))
{
Number:
while((*tChar >= '0') && (*tChar <= '9'))
{
tSave[i] = *tChar;
++i;
++tChar;
}
if(*tChar == '.')
{
tSave[i] = *tChar;
++i;
++tChar;
while((*tChar >= '0') && (*tChar <= '9'))
{
tSave[i] = *tChar;
++i;
++tChar;
}
// --tChar;
}
--tChar;
tSave[i] = ' ';
++i;
}
else if((*tChar == '+') || (*tChar == '-') || (*tChar == '*')||
(*tChar == '/') || (*tChar == '(') || (*tChar == ')')||
(*tChar == '[') || (*tChar == ']') || (*tChar == '{')||
(*tChar == '}'))
{
if(s.IsEmpty() || *tChar == '{' || *tChar == '[' || *tChar == '(')
{
s.Push(*tChar);
if(*(tChar+1) == '-')
{
++tChar;
tSave[i] = *tChar;
++i;
++tChar;
goto Number;
}
}
else
{
//对特殊字符的处理例如'}'']'')'
if((*tChar == '}') || (*tChar == ']') || (*tChar == ')'))
{
char tTemp;
switch(*tChar)
{
case ')':tTemp='(';
break;
case ']':tTemp='[';
break;
case '}':tTemp='{';
break;
default:
break;
}
while(tTemp != s.Top())
{
tSave[i] = s.Top();
++i;
tSave[i] = ' ';
++i;
s.Pop();
}
s.Pop();
}
else //对特殊字符的处理例如'+''-''*''/'
{
tRet = Judge(s.Top(),*tChar);
if(tRet == 1)
{
s.Push(*tChar);
}
else
{
tSave[i] = s.Top();
++i;
tSave[i] = ' ';
++i;
s.Pop();
s.Push(*tChar);
}
}
}
}
else
{
cout<<"输入出错\n";
return -1;
}
tChar++;
}
while(!s.IsEmpty())
{
tSave[i] = s.Top();
++i;
tSave[i] = ' ';
++i;
s.Pop();
}
strncpy(tPtr, tSave, i);
tPtr[i] = '#';
return 1;
}
全部回答
- 1楼网友:长青诗
- 2021-01-20 18:17
《聊斋电视系列...《聊斋电视系列...(22)
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯