2011-01-23 8 views
2

私はメインプログラム内にある関数を記述しようとしていますが、これはユーザーが入力している演算子の優先順位を比較します。この関数は次の演算子のためになります。先行機能

+-*/最低の優先度を持つ最高の優先順位と+-を持つ*/を持ちます。

優先度が最も低い演算子はスタックの最下位にあり、優先度が最も高い演算子はスタックの最上位にあります。したがって、ユーザが+-*/と入力すると、端末に*/+-が表示されます。

私はこれについてどうすればいいのですか?

答えて

4

すべての演算子をstd::stringに読み込みます。以下の型を持つ関数を書く:

bool is_higher_precedence(char lhs, char rhs); 

この機能はlhsrhsよりも優先順位が高いかどうかを返す必要があります。

このファンクションをfunctorパラメータstd::sortとして使用して、演算子を優先順位で並べ替えることができます。

+0

追加のヒント:選択したソート方法が「安定した並べ替え」であることに気をつけてもよいでしょう。つまり、同じ優先順位の2つの演算子は、同じ順番で存在する必要があります。http://en.wikipedia.org/wiki/Sorting_algorithm#Stabilityを参照してください。 –

4

カスタム述語を使用してstd::sortを使用して並べ替えてください。

int precedence(char op) 
{ 
    if (op == '*' || op == '/') return 0; 
    return 1; 
} 

bool comparePrecedence(char a, char b) 
{ 
    return precedence(a) < precedence(b); 
} 

int main() 
{ 
    char input[] = "+-/"; 
    std::sort(input, input + 3, &comparePrecedence); 
} 

明らかに、他の演算子をprecedence関数に追加するだけで追加できます。