首先,它有助於這樣
移動,if
s轉換自身的功能,只是爲了清楚。
bool isOperator(char c){
return c == '+' || c == '-' || c == '*' || c == '/' || c == '^';
}
而且,不需要檢查它的任何操作,只需檢查輸入的是一個數字:
bool isNum(char c){
return '0' <= c && c <= '9';
}
另一件事,與長鏈上面,你有問題如果輸入字符是anyhing而不是'+'
,您還將輸入tempNumber += ...
塊。你將不得不檢查與&&
,或者上面的功能更好:
if (isNum(userInput[iterator])){
tempNumber += userInput[iterator];
}
這也將排除任何無效的輸入像b
,X
和喜歡。
然後,你的問題有雙位數:
的問題是,你總是插入的tempNumber
後輸入一個空格。你只需要這樣做,如果數字序列完成。爲了解決這個問題,只需修改你的長if-else if
鏈的末端:
// ... operator stuff
} else {
postfixExpression << tempNumber;
// peek if the next character is also a digit, if not insert a space
// also, if the current character is the last in the sequence, there can be no next digit
if (iterator == userInput.lenght()-1 || !isNum(userInput[iterator+1])){
postfixExpression << ' ';
}
}
這應該做的,從56 + 78 --> 56 78 +
給予正確的代表性工作。請告訴我,如果有什麼問題。 :)
來源
2011-03-27 03:05:59
Xeo
不完全與您的問題有關,但無論如何:開關和if語句會導致優化後大多數編譯器上的機器代碼相同。但是,如果級聯會遺留可能未初始化的返回值(您的編譯器應該已經警告過您),您應該修復該錯誤(或使用switch語句是正確的)。一般來說,我會在這種情況下使用switch語句,因爲我覺得它更簡潔,但是這是我猜想的味道。 – ChrisWue 2011-03-27 03:26:37
@ChrisWue謝謝你的輸入....你是對的,我應該返回0或其他東西,如果沒有其他命中。是的,一般來說,我只是不知道switch語句是否更快,但我同意你的看法,switch語句看起來很酷哈哈 – 2011-03-27 04:03:24