今天上午下了下昨天的代码。。。。改了一小部分。。。
能够实现对表达式的求值了。。。
但是没对它的容错进行处理了。。。。总的来说功能是实现了。。
但是自己觉得不满意。。。。不满意自己写的代码。。。为什么别人能写出高效的代码。。。
而我却。。。。。总结了一下原因。。。基础没有打牢固。。。有些东西用不习惯。。。例如泛型算法中的List。。.
Vector也不是经常用。。。。
所以本人要闭关去了。。。。。赶快打好基础。。。。早日出关。。。。
//转换成后缀表达式用数组保存字符
int MidToBack(char *tPtr)
{
Stack<char> 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;
}