0

重複の可能性:
高速な C または Objective-C の数学パーサーとは?

動的文字列を式に変換して評価するには、どの関数コードを使用できますか?

#include <stdio.h>
#include <conio.h>
#include <string.h>
int main() {
  char var1[] = "3";
  char var2[] = "2";
  char var3[] = "5";
  char exp[20]  = "";
  int result;

  // Trying to create a random expression "(3+2)*5" 
  strcat(exp, "( ");
  strcat(exp, var1);
  strcat(exp, " + ");  
  strcat(exp, var2);  
  strcat(exp, " ) * ");  
  strcat(exp, var3);    

  result = somefunction(exp);

  printf("Result : %i\n", result);
  return 0;
}
4

2 に答える 2

3

文字列を解析して評価する必要があります。これは簡単なことではありません。申し訳ありません。ただし、ここで実際の例を見ることができます。

于 2012-12-13T19:47:06.903 に答える
0

あなたはパーサーを書くことについて話している。最初のステップは、そのパーサーのルールを理解することです。

それらを単純に「すべての数学は左から右に評価され、括弧が優先される」と定義すると、それほど難しくありません。しかし、それは明らかに「1+2*3」に対して予期しない結果をもたらします。

オプションがある場合は、逆研磨記法計算機を実装する方がはるかに簡単です。そのオプションがない場合は、おそらくツリーに解析して開始し、「リーフからルート」の順序で評価する必要があります。

于 2012-12-13T19:59:35.483 に答える