2012-05-02 2 views
0

나는 GUI 계산기를 만들었습니다. 그래서 누군가가 버튼을 누르면 숫자와 기호가 레이블에 표시되고 컴퓨터가 문자열을 캡처 할 때 Enter 키를 누르면 그 부분에서 도움이 필요합니다. 파이썬에는 C#에서 비슷한 것을 사용할 수있는 eval 문이 있다는 것을 알고 있습니다.문자열로 주어진 산술 표현식을 계산하는 방법

이것이 도움이된다면 여기에 코드가 있습니다. 구체적으로는 평가가없는 C#에서 button_click

public class form1 : Form 
{ 
    private Label lab; 
    private Button button2; 
    private Button button; 
    private Button plus; 
    private MathFunctions.MathParser calc; 

    public static void Main() 
    { 
     Application.Run(new form1()); 
    } 

    public form1() 
    { 
     // Initialize controls 
     ... 
    } 

    private void button_Click(object sender,System.EventArgs e) 
    { 
     string answer = lab.Text; 
    } 

    private void button2_Click(object sender,System.EventArgs e) 
    { 
     lab.Text = lab.Text + "2"; 
    } 

    private void button_plus(object sender,System.EventArgs e) 
    { 
     lab.Text = lab.Text + "+"; 
    } 
} 
+0

정확히 어떤 일이 발생하지 않았습니까? 가능한 한 구체적으로 작성하십시오 –

+1

중복 가능성이 있습니까? http://stackoverflow.com/questions/355062/is-there-a-string-math-evaluator-in-net – Josh

+1

미래의 질문을 위해 코드 샘플을 여러 줄로 압축하십시오. 이 코드에는 무관 한 코드가 너무 많습니다. –

답변

1

방법을 확인합니다. 원칙적으로 런타임에 코드를 생성하고 컴파일하고 어셈블리를 만든 다음 코드를 실행하거나 IL을 방출하여 동적 메서드를 호출 할 수 있지만 그 모두는 그리 간단하지 않습니다.

잘 알려진 방법 중 하나를 사용하여 문자열을 구문 분석 한 다음 expression tree을 만드는 것이 좋습니다.

또는 더 이상 사용되지 않는 자바 스크립트 엔진을 식 구문 분석에만 사용할 수 있습니다. 당신은 왜 그것을 사용하지 파이썬에 익숙하기 때문에

Best and shortest way to evaluate mathematical expressions

0

를 참조하십시오? C# 코드에서 IronPyton Script Engine 개체를 만듭니다. 스 니펫은 다음과 같습니다.

string expression = lab.Text; // @"540 + 4/3" try to test 

ScriptEngine engine = Python.CreateEngine(); 
ScriptSource source = engine.CreateScriptSourceFromString(expression, SourceCodeKind.Expression); 

int result = source.Execute<int>(); 
관련 문제