if
まず、このようなものを動かすのに役立ちます
userInput[i] != '+' || userInput[i] != '-' || userInput[i] != '*' || userInput[i] != '/' || userInput[i] != '^' || userInput[i] != ' ' && i < userInput.length()
明確にするために、独自の機能に。
bool isOperator(char c){
return c == '+' || c == '-' || c == '*' || c == '/' || c == '^';
}
また、演算子がないことを確認する必要はありません。入力が数値であることを確認するだけです。
bool isNum(char c){
return '0' <= c && c <= '9';
}
もう1つ、上記の長いチェーンでは、入力文字が。以外の文字である場合、ブロックにも入るという問題が発生しましtempNumber += ...
た。上記の関数で確認する必要があります。'+'
&&
if (isNum(userInput[iterator])){
tempNumber += userInput[iterator];
}
b
これにより、などの無効な入力も除外されますX
。
次に、2桁の数字
の問題については、次のようになります。問題は、を挿入した後は常に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 +
。何か問題があれば教えてください。:)