这个设计到优先级 要栈处理
下面这个程序 输入0结束
输入其它的+-*/运算式 输出结果
但是字符与字符间有空格 不然要出错
比如输入1 + 2
或者 + 2 * 5 - 7 / 11
注意有空格
#include
#include
#include
#include
using namespace std;
int main(){
char ch[210];
int len,i,j;
double n,m,k;
while (cin.getline(ch,210))
{
len = strlen(ch);
if(len==1&&'0' == ch[0])break;
stack
stack
i=0,k=0;
while (i
if (' '== ch[i]){
i++;
continue;
}
else if ('0'<=ch[i] && '9'>=ch[i])
{
k = 0;
k = k*10 + ch[i]-'0';
i++;
while ('0'<=ch[i] &&'9'>=ch[i]&&i
k = k*10 + ch[i]-'0';
i++;
}
s1.push(k);
k =0;
}
else
{
if ('*'==ch[i] || '/'==ch[i])
{
j =i;
n = s1.top(),s1.pop();
i++;
i++;
k = 0;
while ('0'<=ch[i] && '9'>=ch[i]&&i
k = k*10 + ch[i]-'0';
i++;
}
if ('*'==ch[j])
{
k = k*n;
}else{
k = n/k;
}
s1.push(k);
}
else if('+'==ch[i] || '-'==ch[i])
{
s2.push(ch[i]);
i++;
}
}
}
char str, str2;
while (!s2.empty())
{
str = s2.top();
s2.pop();
k = s1.top(),s1.pop();
if ('+' == str)
{
n = s1.top();s1.pop();
if (!s2.empty())
{
str2 = s2.top();
if ('-' == str2)
{
k = n - k;
}else{
k = k + n;
}
}else
k = k + n;
// cout<
}else{
n = s1.top();s1.pop();
if (!s2.empty())
{
str2 = s2.top();
if ('-' == str2)
{
k = k + n;
}else{
k = n - k;
}
}else
k = n - k;
s1.push(k);
}
}
printf("%0.2lf\n",s1.top());s1.pop();
}
return 0;
}
#include
main()
{ int a,c,d=0;
float e;
char b;
printf("please input\n");
scanf("%d%c%d",&a,&b,&c);
switch(b)
{case '+':d=a+c;break;
case '-':d=a-c;break;
case '*':d=a*c;break;
case '/':e=a*1.0/c;break;
}
if (d!=0) printf("%d%c%d=%d",a,b,c,d);
else printf("%d%c%d=%f",a,b,c,e);
}
这个写起来有难度
这个扯到算符优先级算符的实现,很麻烦的。楼主放高分请人吧。