我使用了一个子程序来区分运算符的优先级:
static int p(char c){
if ((c=='+') || (c=='-')) {
return 0;
}
else if ((c=='/') || (c=='*')) {
return 1;
}
else {
return -1;
}
}
我对代码做了一些工作。我应该遵循这种转变:转变。对于 i=1 到 m 如果 c_i 是操作数:将 c_i 传输到输出。
如果 c_i 是左括号:将 c_i 推到 temp。
如果 c_i 是右括号:从 temp 中弹出元素并将它们传输到输出,直到遇到左括号。弹出左括号。
如果 c_i 是一个运算符:让顶部的临时元素为 t。将元素从 temp 弹出并传输到输出,直到:p(t) < p(c_i) 或
t 是左括号或
温度为空。
将 c_i 推到温度。
将 temp 中的剩余元素传输到输出。
问题: 1-如果数字是运算符,我基本上被卡住了如何继续。我坚持上面列表中的第 3 步和第 4 步。2-带有两个星号的部分是我不知道该怎么做的地方!
该程序应将中缀转换为后缀。从 ((3 + 5 1)=8) 14 到 3 5 1 +8 = 14。
提前致谢!
备注和符号: -pop 操作在每次应用时删除字符串的第一个元素。字符串的顶部元素是字符串的第一个元素。push 操作在字符串的开头追加一个元素。
- 如果需要,您可以使用 Integer:parseInt(s) 和 Character:getNumericV alue(c) 方法将字符串 s 和字符 c 转换为整数值。
- 不允许使用字符串以外的数据结构来操作表达式。
static String infixToPostfix(String infix){
String postfix = "";
infix = readLine();
String temp ="";
char t;
for (int i=0 ; i<infix.length(); i++) {
t = temp.charAt(0);
if (infix.charAt(i) !=')' && infix.charAt(i)!= '(' && infix.charAt(i)!= p(infix.charAt(i)))
postfix += infix.charAt(i);
if (infix.charAt(i) == '+') {
while ( (p('+') <= p(t)) && (t != '(') && (!temp.equals("") ) ){
}
postfix = postfix + temp.charAt(i);
}
if (infix.charAt(i) == '-') {
while ( (p('-') <= p(t)) && (t != '(') && (!temp.equals("") ) ){
postfix = postfix + temp.charAt(i);
}
}
else if (infix.charAt(i) == '*') {
while ( (p('*') <= p(t)) && (t != '(') && (!temp.equals("") ) ){
postfix = postfix + temp.charAt(i);
}}
***if (infix.charAt(i) == '/') {
while ( (p('/') <= p(t)) && (t != '(') && (!temp.equals("") ) ){
postfix = postfix + temp.charAt(i);
}}
if (infix.charAt(i) == '(') {
temp = infix.charAt(i)+temp;
}
if (infix.charAt(i) == ')') {
infix = temp;***
}
}
return postfix;
}