几个函数

1.转换函数
string  convertIntToString( int  n) // int转换成string
{
 stringstream sstr;
 
string str;
 sstr
<<n;
 sstr
>>str;
 
return str;
}

string  convertDoubleToString( double  n) // double转换成string
{
 stringstream sstr;
 
string str;
 sstr
<<n;
 sstr
>>str;
 
return str;
}


double  convertStringToDouble( string  str)
{
 
double result=0;
 
int len=str.length();
 
for(int i=0;i<len-1;i++)
 
{
  
if(str[i]=='.')
  
{
   result
=0;
   
double index=1;
   
for(int j=i-1;j>=0;j--)
   
{
    
int tmp=str[j]-'0';
    result
+=tmp*index;
    index
*=10;
   }

   index
=0.1;
   
for(int k=i+1;k<=len-1;k++)
   
{
    
int tmp=str[k]-'0';
    result
+=tmp*index;
    index
*=0.1;
   }

   
return result;
  }

 }

 
int index=1;
 
for(int l=len-1;l>=0;l--)
 
{
  
double tmp=str[l]-'0';
  result
+=tmp*index;
  
  index
*=10;
 }

 
return result;
}

// string 转换成int
int  convertStringToInt( string  str)
{
 
  
int len=str.length();
 
int index=1;
 
int result=0;
 
for(int l=len-1;l>=0;l--)
 
{
  
int tmp=str[l]-'0';
  result
+=tmp*index;
  
  index
*=10;
 }

 
return result;
}

 

2. 表达式求值

 

const   int  ESIZE = 60 ;
double  s1[ESIZE + 1 ]; // 操作数
char  s2[ESIZE + 1 ]; // 运算符
int  t1,t2;
// 一次运算
void  calcu()
{
 
double x1,x2,x;
 
char p;
 
//弹出一个运算符
 p=s2[t2--];
 
//弹出两个操作数
 x2=s1[t1--];
 x1
=s1[t1--];
 
//计算
 switch(p)
 
{
 
case '+':
  x
=x1+x2;
  
break;
 
case '-':
  x
=x1-x2;
  
break;
 
case '*':
  x
=x1*x2;
  
break;
 
case '/':
  x
=x1/x2;
  
break;
 }

 
//结果入栈
 s1[++t1]=x;
}

double  calculator(vector < string >  vec)
{
 
//去掉两端的括号
 while((vec.at(0)=="(")&&(vec.at(vec.size()-1)==")"))
 
{
  vec.pop_back();
  vector
<string>::iterator tit=vec.begin();
  vec.erase(tit);
 }

 
char c;
 
double v;
 vector
<string>::iterator it=vec.begin();
 
//设置空栈
 t1=t2=0;
 
 
//第一个字符
 c=(*it)[0];
 
while(it!=vec.end())
 
{
  
switch(c)
  
{
  
case '+':
  
case'-':
   
if(t2&&(s2[t2]!='('))
   
{
    
//执行选遇到的加减乘除运算
    calcu();
   }

   
//当前运算符进栈
   s2[++t2]=c;
   
//读下一个
   it++;
   c
=(*it)[0];
   
break;
  
case '*':
  
case '/':
   
if(t2&&(s2[t2]=='*'||s2[t2]=='/'))
   
{
    
//执行先遇到的乘,除运算
    calcu();
   }

   
//当前运算符进栈
   s2[++t2]=c;
   
//读下一个
   it++;
   c
=(*it)[0];
   
break;
  
case '(':
   
//左括号进栈
   s2[++t2]=c;
   
//读下一个
   it++;
   c
=(*it)[0];
   
break;
  
case ')':
   
if(s2[t2]!='(')
   
{
    
//执行括号内加减乘除运算
    calcu();
   }

   
//弹出左括号
   t2--;
   
//读下一个
   it++;
   
if(it!=vec.end())
   c
=(*it)[0];
   
break;
  
default:
   
//数字转成double
   v=convertStringToDouble(*it);
   
//操作数进栈
   s1[++t1]=v;
   
//读下一个
   it++;
   
if(it!=vec.end())
   
{
    c
=(*it)[0];
   }

   
break;
  }

 }

 
while(t2)
  calcu();
 
return s1[t1];

}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值