|
|
发表于 2005-9-30 16:28:00
|
显示全部楼层
Re:新手编“计算器”被卡,求教!!!
我改的,没有错误检查,只支持+-*/=
#include <iostream>
#include <string>
using namespace std;
int prio(char op) //优先级
{
switch(op)
{
case '=':
return(1);
case '+':
case '-':
return(2);
case '*':
case '/':
return(3);
default:
cout<<"err";
return(-1);
}
}
int calcu(int num1,int num2,char op)
{
switch(op)
{
case '+':
return(num1+num2);
case '-':
return(num1-num2);
case '*':
return(num1*num2);
case '/':
if(num2==0)
{
cout<<"err";
return(0);
}
return(num1/num2);
default:
cout<<"err";
return(-1);
}
}
void main ()
{
char p[ 100 ]="1+2*34-5656=";
int a[ 100 ];
int b[ 100 ]; // 存放数字的数组
char oper[ 100 ]; //存放运算符的数组
static int x = 0;
int i ,sum;
int m = strlen ( p );
//从用户输入的数学表达式取数字和运算符, 里面还有个小BUG^_^,现在先不管,以后再改吧
for( i = 0; i < m; i++)
{
if( i == 0 )
{
a[ i ] = p[ i ] - 48 ; continue;
}
if( (p[ i ] == '+') || (p[ i ] == '-') || (p[ i ] == '*') || (p[ i ] == '/') || (p[ i ] == '='))
{
oper[ x ] = p[ i ];
b[ x ] = a [ i-1 ];
a[ i ] = p[ i ] = 0;
++x;
}else
{
a[ i ] = a[ i - 1 ] * 10 + p[ i ] - 48;
}
}
//求值
int j,k;
i=0;
sum=b[0];
while(1)
{
if(oper=='=')
break;
if(prio(oper)>=prio(oper[i+1]))
{
sum=calcu(sum,b[i+1],oper);
i++;
}
else
{
k=i;
i++;
j=b;
while(1)
{
j=calcu(j,b[i+1],oper);
i++;
if(prio(oper[i-1])>prio(oper))
break;
}
sum=calcu(sum,j,oper[k]);
}
}
//输出表达式,但无法计算。。。
for ( i = 0 ; i < x; i++)
{
cout << b[ i ] << oper[ i ];
}
cout<<sum<<"\n";
getchar();
} |
|