0
私はすでに後置記法でそれを持っており、後置記法を持つ文字列変数を送信しています:5 15 2 * + ここに私のコードです:C++でスタックを使用してPostfixの式を評価する
int evaluatePostFix(string postfix_expression){
//Create a new stack
stack<int> theStack;
//Loops while the postfix expression string still contains values
while(postfix_expression.length()>=1){
//Loops on a number an whitespace
while(isdigit(postfix_expression.at(0)) || isspace(postfix_expression.at(0))){
//Holds a number that is above two digits to be added to the stack
string completeNum;
if(isdigit(postfix_expression.at(0))){
//Add the digit so it can become a full number if needed
completeNum+=postfix_expression.at(1);
}
else {
//Holds the integer version of completeNum
int intNum;
//Make completeNum an int
intNum=atoi(completeNum.c_str());
//push the number onto the stack
theStack.push(intNum);
}
//Check to see if it can be shortened
if(postfix_expression.length()>=1){
//Shorten the postfix expression
postfix_expression=postfix_expression.substr(1);
}
}
//An Operator has been found
while(isOperator(postfix_expression.at(0))){
int num1, num2;
char op;
//Grabs from the top of the stack
num1=theStack.top();
//Pops the value from the top of the stack - kinda stupid how it can return the value too
theStack.pop();
//Grabs the value from the top of the stack
num2=theStack.top();
//Pops the value from the top of the stack
theStack.pop();
//Grab the operation
op=postfix_expression.at(0);
//Shorten the postfix_expression
postfix_expression=postfix_expression.substr(1);
//Push result onto the stack
theStack.push(Calculate(num1,num2, op));
}
}
return theStack.top();
}
私が手にエラーがある
私ははるかに高く評価されるだろう、このエラーに取得することができます任意の助けを「のDequeイテレータはdeferencableありません」。 btw私は2,3年でC++を使用していないので、少し錆びています。
'isspace()'を 'isdigit()'と同じように扱っているのはなぜですか?それは私の間違いのようです。 (おそらく、あなたがトリップしたエラーメッセージではありませんが) – sarnold
構文エラーがあったので、すべてのコードを貼り付けましたか?エラーの原因となった行だけを投稿しないのはなぜですか? – Ayjay
Hrmの場合は、文字列の一部を入力として使用した後に文字列を短くすることができるかどうかを確認する必要があります。文字列がスペースまたは数字で終わっていれば、外側の 'while(postfix_expression.length()> = 1)'ループを終了するとは思わない。文字列を減らすことができるかどうかをチェックしないでください。入力を消費したため、サイズを小さくしてください。また、 '12'を入力すると、文字列から1桁だけを取り除くことはできません。 – sarnold