第1个回答 推荐于2016-09-18
#include<stdio.h>
void add(int a,int b,int c)
{
c=a+b;
printf("%d\t",c);
printf("\n");
}
void minus(int a,int b,int c)
{
c=a-b;
printf("%d\t",c);
printf("\n");
}
void multiplication(int a,int b,int c)
{
c=a*b;
printf("%d\t",c);
printf("\n");
}
void div(int a,int b,int c)
{
(float)c=(float)a/(float)b;
printf("%f\t",c);
printf("\n");
}
main()
{
int a,b,c;
char p;
puts("input A:\n");
scanf("%d",&a);
puts("input B:\n");
scanf("%d",&b);
puts("input operation:\n");
getchar();
p=getchar();
if(p=='+') add(a,b,c);else
if(p=='-') minus(a,b,c);else
if(p=='*') multiplication(a,b,c);else
if(p=='/') div(a,b,c);else
puts("没有注册这个运算符号\n");
}本回答被提问者采纳
第2个回答 2008-05-31
我没有用栈
全是关于字符串的处理
也实现了
注:不支持中括号,大括号
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
int f0(double d)
{
for(int i=1;;i++)
if(int(d)/(int)pow(10.0,i)==0)
return i;
}
string f(string s)
{
s='('+s+')';
while(s.find("/")!=-1)
{
int m=s.find("/");
int pm=s.find_last_of("+-*()/[]{}",m-1);
int nm=s.find_first_of("+-*()/[]{}",m+1);
double d=atof(s.substr(pm+1,m-pm-1).c_str())/atof(s.substr(m+1,nm-m-1).c_str());
char ch[20];
_gcvt(d,f0(d)+2,ch);
s.replace(pm+1,nm-pm-1,string(ch));
}
while(s.find("*")!=-1)
{
int m=s.find("*");
int pm=s.find_last_of("+-*()/[]{}",m-1);
int nm=s.find_first_of("+-*()/[]{}",m+1);
double d=atof(s.substr(pm+1,m-pm-1).c_str())*atof(s.substr(m+1,nm-m-1).c_str());
char ch[20];
_gcvt(d,f0(d)+2,ch);
s.replace(pm+1,nm-pm-1,string(ch));
}
while(s.find('+')!=-1)
{
int m=s.find('+');
int pm=s.find_last_of("+-*()/[]{}",m-1);
int nm=s.find_first_of("+-*()/[]{}",m+1);
double d=atof(s.substr(pm+1,m-pm-1).c_str())+atof(s.substr(m+1,nm-m-1).c_str());
char ch[20];
_gcvt(d,f0(d)+2,ch);
s.replace(pm+1,nm-pm-1,string(ch));
}
while(s.find("-")!=-1)
{
int m=s.find("-");
int pm=s.find_last_of("+-*()/[]{}",m-1);
int nm=s.find_first_of("+-*()/[]{}",m+1);
double d=atof(s.substr(pm+1,m-pm-1).c_str())-atof(s.substr(m+1,nm-m-1).c_str());
char ch[20];
_gcvt(d,f0(d)+2,ch);
s.replace(pm+1,nm-pm-1,string(ch));
}
return s.substr(1,s.length()-1-1);
}
int main()
{
string str="1+2";
A:
cout<<"请输入算式:";
cin>>str;
string str1=str;
if(str.find_first_not_of("1234567890+-*/().")!=-1){cout<<"你输入的有不合法的字符!"<<endl;goto A;}
while(str.find(")")!=-1)
{
int i=str.find(")");
int j=str.rfind("(",i);
str.replace(j,i-j+1,f(str.substr(j+1,i-j-1)));
}
cout<<str1<<'='<<f(str)<<endl;
goto A;
system("pause");
}