一个计算四则表达式的模板

文章作者 100test 发表时间 2008:01:25 14:29:57
来源 100Test.Com百考试题网


  给大家分享的,一个很方便的函数模板,可以并且只可以计算含括号的四则表达式只有一个函数接口:int GetExpValue(_Tstream&. istrin, _T&. nReturn)
参数解释:
  istrin: 一个输入流,可以是标准IO流,可以是文件流,也可以是串流
  nReturn:用于接收计算结果的变量,计算所使用的类型由这个变量确定
  返回值:返回非0表示计算成功,0表示计算失败有错误

程序代码:

namespace fy_Exp{
namespace {template
inline _T GetExpValue(_T t[], char&. csym){
char c=csym. csym=0.
switch(c){
case :return t[0] = t[1].
case -:return t[0] -= t[1].
case *:return t[0] *= t[1].
default: return t[0] /= t[1].//case /:
}
}}
template
/* _Tstream: inputstream, _T: get return value
* Return nonzero if get value successfully */
int GetExpValue(_Tstream&. istrin, _T&. nReturn){
_T t[3] = {0}. //雨中飞燕之作
char csym[3] = " ".
int nLevel = 1, nERR = 0.
if(!(istrin >>t[1]))istrin.clear().
for(..){
if(istrin >>csym[2]){
switch(csym[2]){
case (:
if(!csym[1]){nLevel=0x100. nERR=1.}else
if(!GetExpValue(istrin, t[2]))nLevel|=0x10.
else{nLevel=0x100. nERR=1.}
break.
case ):
{nLevel = 0x100.}break.
case :case -:case *:case /:
{csym[nLevel ] = csym[2].}break.
case :case \r:case \n:case \t:continue.
default:
{nLevel=0x100. nERR=1.}
}
if(nLevel==0x100)break.
if(nLevel &.0x10 || istrin>>t[2]){
nLevel &.= 0xF.
if(nLevel==1){t[1]=t[2].csym[1]=0.continue.}
if(csym[1]==*||csym[1]==/){
GetExpValue(t 1, csym[1]).
}
else{
GetExpValue(t, csym[0]).
t[1]=t[2].csym[0]=csym[1].csym[1]=0.
}
nLevel = 1.
}
else istrin.clear().
}
else{nERR = -1. break.}
}
if(csym[1])t[2]=0,nReturn=GetExpValue(t 1, csym[1]).
else nReturn=GetExpValue(t, csym[0]).
return nERR==-1?1:0.
}}


函数模板使用示例:
在以上那段代码的后面加上以下代码:

程序代码:

#include
#include
#include
using namespace std.
int main(void)
{
string s1.
while(cin >>s1)
{
istrstream isin(s1.data()).
double d.
if(fy_Exp::GetExpValue(isin, d))
{
cout <}
else
{
cout <<"ERROR"<}
}
return 0.
}

然后编译执行就可以了(*^_^*)
其它:C 上一定编译错误,不保证在VC6上也能通过编译
建议使用VC7或VC更高版本,或者使用GNU C 编译

如果对以上代码有疑问或者建议都可以找我。



相关文章


C语言开发平台的搭建
C语言猜数字游戏重写版
哲学家就餐问题--C原代码
利用钩子函数来捕捉键盘响应的windows应用程序
一个计算四则表达式的模板
C#中使用MYSQL数据库
函数的可变参数详谈
C#动态创建Acce 数据库
C#实现分布式数据库查询
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛