计算器:输入一段计算式字符串得出运算结果
列如输入字符串: 10+60*(20+23)-[(23+5)*2]
然后按下按钮就可以得出运算结果
计算式有优先等级。
请问谁有类似代码,或者该怎么写。
[email protected]

解决方案 »

  1.   

    需要用到栈,我曾经用C写了一个,主程序如下,对于栈的操作你应该了解,自己写出来就行了
    或者用C++的stack容器
    //Push入栈
    //Pop出栈
    char c,theta;
    int a,b;
    SqStackC OPTR;//运算符栈
    SqStackI OPND;//运算数栈
    char op[7][7]={{'>','>','<','<','<','>','>'},{'>','>','<','<','<','>','>'},
    {'>','>','>','>','<','>','>'},{'>','>','>','>','<','>','>'},{'<','<','<','<','<','=',' '},
    {'>','>','>','>',' ','>','>'},{'<','<','<','<','<',' ','='}};//算符间的优先关系表示int judge(char ope){
    switch(ope){
    case '+':return 0;
    case '-':return 1;
    case '*':return 2;
    case '/':return 3;
    case '(':return 4;
    case ')':return 5;
    case '#':return 6;
    }
    return ERROR;
    }//判断栈顶字符和输入字符对应的位置以判断优先级char Precede(CharSElem ope,char c){
    int a,b;
    a = judge(ope);b = judge(c);
    return op[a][b];
    }//返回优先级int Operate(int a,char theta,int b)
    {
    switch(theta){
    case '+':return a+b;
    case '-':return a-b;
    case '*':return a*b;
    case '/':return a/b;
    }
    return ERROR;
    }//对操作数进行运算int change(char c){
    return 0+c-48;
    }int EvaluateExpression(){
    InitStack(OPTR);
    Push(OPTR,'#');
    InitStack(OPND);
    c = getchar();
    while(c != '#'||GetTop(OPTR) != '#'){
    if(c!='+'&&c!='-'&&c!='*'&&c!='/'&&c!='('&&c!=')'&&c!='#'){
    Push(OPND,change(c));c = getchar();}
    else
    switch(Precede(GetTop(OPTR),c)){
    case '<':Push(OPTR,c);
    c = getchar();
    break;
    case '=':Pop(OPTR,theta);
    c = getchar();
    break;
    case '>':Pop(OPTR,theta);
    Pop(OPND,b);
    Pop(OPND,a);
    Push(OPND,Operate(a,theta,b));
    break;
    }
    }
    return GetTop(OPND);
    }//对输入的表达式进行解释执行int main()
    {
    //int n;
    printf("请输入表达式,以“#”结束:\n");
    //n=EvaluateExpression();
    printf("%d\n",EvaluateExpression());
    return 0;
    }
      

  2.   

    jdk1.6+, javax.script.*
      public static void main(String[] args) throws Exception {
        System.out.println(eval("1+2"));
        System.out.println(eval("1+2*3"));
        System.out.println(eval("(1+2)*3-4"));
      }  public static Number eval(String expression) throws Exception {
        ScriptEngine engine = new ScriptEngineManager()
            .getEngineByName("javascript");
        return (Number)engine.eval(expression);
      }
      

  3.   

    jep-2.24.jar 开源框架用在j2ME上提示Cannot find class java/lang/Number
    ,该咋办