一个计算四则表达式的模板
在9月8日那天我特意编写的,给大家分享的,l5F#Clb'_`'v_R2e一个很方便的函数模板,可以并且只可以计算含括号的四则表达式
只有一个函数接口:int GetExpValue(_Tstream& istrin, _T& nReturn)8a,yE@D-j9\V
参数解释:
istrin: 一个输入流,可以是标准IO流,可以是文件流,也可以是串流
nReturn:用于接收计算结果的变量,计算所使用的类型由这个变量确定
返回值:
返回非0表示计算成功,0表示计算失败有错误,t _xe-l
Ql%vdEr x&A`_/We+_'x
sr5aI)]h
程序代码:
namespace fy_Exp{j5YAy@2m4{7i+f
namespace {template <class _T>
inline _T GetExpValue(_T t[], char& csym){y s h0i{ w
char c=csym; csym=0;
switch(c){3rp5T!M T
case '+':return t[0] += t[1];,~?;e+sC#m!]\.{
case '-':return t[0] -= t[1];
case '*':return t[0] *= t[1];j~YvD2kK6PZV
default: return t[0] /= t[1];//case '/':
}^z?r;l
}}
template <class _T, class _Tstream> \&NgK3`Y#C
/* _Tstream: inputstream, _T: get return value
* Return nonzero if get value successfully */W,v0O']o'iW4|
int GetExpValue(_Tstream& istrin, _T& nReturn){
_T t[3] = {0}; //雨中飞燕之作
char csym[3] = "++";po1b Ii\u6S
int nLevel = 1, nERR = 0;ne7`j-XWy
if(!(istrin>>t[1]))istrin.clear();$\:Ts{*rD|6G!m F
for(;;){
if(istrin>>csym[2]){
switch(csym[2]){-fy#^)nPh E
case '(':;VO:HG"d
if(!csym[1]){nLevel=0x100; nERR=1;}else QBGN~4RR-N!p.P
if(!GetExpValue(istrin, t[2]))nLevel|=0x10;