中置式を取り、前置式に変換する関数があります。これが私のコードです:
string infixToPrefix(string expression)
{
stack<char> S; //holds operators
stack<char>output; //display like in class
string prefix = "";
char ch;
S.push('#');
for (int i = expression.length(); i > 0; i--){
ch = expression[i];
if (isOperand(ch) == true){
output.push(ch);
}
else {
if (ch == '('){
while (S.top() != ')'){
output.push(S.top());
S.pop();
}
}
else {
while (isp(S.top()) > icp(ch)){
output.push(S.top());
S.pop();
}
S.push(ch);
}
}
}
while (S.top() != '#'){
output.push(S.top());
S.pop();
}
while (!output.empty()){
if (output.top() == ')'){
output.pop();
}
else{
prefix.append(1,output.top());
output.pop();
}
}
return prefix;
}
この関数は、教授が私に使用してほしいサンプル式でうまく機能しました。"3-4-5" は "--345" を生成し、"5*(4/2)" は "*5/42" を生成します。ただし、これは「3^4^5」という式では機能しません。「^3^45」であるはずの「^^345」が表示され続けます。
私のアルゴリズムは間違っていますか?それとも、これは ICP と ISP に関係があるのでしょうか (彼女が私にくれたコードでは、どちらも "^" = 3 です)。