1

22+3*9/8 の入力が割り当てられている変数「計算」を計算しようとしています。私はたくさん試しましたが、私の努力はすべて無駄です.この問題を解決して出力結果を得る方法を教えてください.

char calculate[10]; 
calculate = "22+3*9/8"; 
cout<< calculate;
4

2 に答える 2

3

infix ステートメントを postfix に変換する必要がある場合は、スタックを使用して式を評価する方がはるかに簡単です。を参照してください(これを行うには多くの方法があります)

式を後置に変換した後

22+3*9/8 -> 22 3 9 * 8 / +

スタックを使用して式を評価できます

数値の場合はスタックにプッシュし、演算子の場合はスタックの最上部の 2 つのオペランドを取得して計算し、結果をスタックにプッシュします。

expr  stack (top ... bottom)
22    22
3     3 22
9     9 3 22
*     27 22
8     8 27 22
/     3 22        // here u could start using floating numbers instead 3.375 instead of 3
+     25
于 2012-05-11T19:24:01.857 に答える
1

C# で新しいRoslyn API を使用して、C++ API から呼び出すことができます。

次に、次の例を使用できます。

 using Roslyn.Compilers;
 using Roslyn.Scripting;
 using Roslyn.Scripting.CSharp;


 public int Eval(string expr) {
       var engine = new ScriptEngine();
       return (int)engine.Execute(expr);
 }

警告ですが、式に不正な文字やその他の種類のものが含まれていないことを確認する必要があります。これはおそらくセキュリティ バグである可能性があります。

于 2012-05-11T19:45:39.307 に答える