到目前为止,我帮你把这儿
if(z!=0&&*(st+j)!='('&&*(st+j)!=')')
改成
if(z!=0&&*(st+j)!='('&&*(st+j-1)!=')')
因为"+("和")-"是不同的,'('前面是符号,而')'后面才能跟符号
另外你这个程序数据结构有缺陷,没有peek函数,只有pop函数,pop是向外取出数据并在堆栈中删除,
而peek是查看栈顶元素,并不出栈,这样能解决你说的这个问题:
"有想过从栈取一个数然后在从数组中取一个数进行运算,这样省一步入栈,觉得麻烦就没这么做"
这个想法主要用在运算符数组中,从运算符数组中取一个,再用peek看一下运算符栈的栈顶元素,比较它们的优先级,
若栈顶元素优先级高的话,就用pop取出运算符,再从数字栈中取两个数字运算。反之使用数组中的运算符配合数字栈的两个数字进行运算。当然数字栈仍然全部入栈。
另外括号的问题,输入的格式包含单括号可以,但包含多层括号就错误了。这要用到消去法:栈顶为'('当前为')'则消去,即出栈'(',st向后移动,不做任何运算。
要做到这两点,你需要改一下程序的整体框架,动大手术,否则输入其他形式的数据就会计算错误。
我帮你改也改了半天也不好,满足这个格式又不满足那个格式,完全是拼凑出来的,你还是自己看看吧。另外可以到我的资源里面下载一个,有源码的
if(z!=0&&*(st+j)!='('&&*(st+j)!=')')
改成
if(z!=0&&*(st+j)!='('&&*(st+j-1)!=')')
因为"+("和")-"是不同的,'('前面是符号,而')'后面才能跟符号
另外你这个程序数据结构有缺陷,没有peek函数,只有pop函数,pop是向外取出数据并在堆栈中删除,
而peek是查看栈顶元素,并不出栈,这样能解决你说的这个问题:
"有想过从栈取一个数然后在从数组中取一个数进行运算,这样省一步入栈,觉得麻烦就没这么做"
这个想法主要用在运算符数组中,从运算符数组中取一个,再用peek看一下运算符栈的栈顶元素,比较它们的优先级,
若栈顶元素优先级高的话,就用pop取出运算符,再从数字栈中取两个数字运算。反之使用数组中的运算符配合数字栈的两个数字进行运算。当然数字栈仍然全部入栈。
另外括号的问题,输入的格式包含单括号可以,但包含多层括号就错误了。这要用到消去法:栈顶为'('当前为')'则消去,即出栈'(',st向后移动,不做任何运算。
要做到这两点,你需要改一下程序的整体框架,动大手术,否则输入其他形式的数据就会计算错误。
我帮你改也改了半天也不好,满足这个格式又不满足那个格式,完全是拼凑出来的,你还是自己看看吧。另外可以到我的资源里面下载一个,有源码的