私がやろうとしているのは、"((4+2)/2)" などの文字列を取得し、それを評価して 3 を返すことです。左括弧 '('、1 つは数字 '0' から '9' 用、もう 1 つは演算子 '+' '-' '*' '/' および '%' 用です。
私が抱えている問題は、実際に文字列をスタックに分離することです。私のコードは次のとおりです。
//The evaluate function takes a string containing an arithmetic expression,
//evaluates it,and returns its result
int evaluate(string exp)
{
stack<char> parStack;
stack<int> numStack;
stack<char> opStack;
int j = exp.size();
int i=0;
char x;
//for (i=0; i<j; i++)
//{
while (i<j)
{
if(exp[i] = '(')
{
parStack.push(exp[i]);
cout << exp[i] << endl; // just to see what is being pushed
}
if((exp[i]='0') || (exp[i]='1') || (exp[i]='2') || (exp[i]='3') || (exp[i]='4') || (exp[i]='5') || (exp[i]='6') || (exp[i]='7') || (exp[i]='8') || (exp[i]='9')) // I feel this is terribly inefficient
{
numStack.push(exp[i]);
}
if((exp[i] = '+') || (exp[i] = '-') || (exp[i] = '*') || (exp[i] = '/') || (exp[i] = '%'))
{
opStack.push(exp[i]);
}
i++;
}
//} // end for
return -1;
} // end evaluate
ご覧のとおり、for ループと while ループの両方でこれに取り組んでみましたが、どちらも同じ結果になりました。どういうわけか、「(5+3)」と入力すると、プッシュされているものとして「(((((」が出力されます。if ステートメントがこのように繰り返されるのはなぜですか?ここでは return を無視します。スタックを効果的に作成できるようになると、文字列を実際に評価するために完了するため、最後に -1 を付けます。