首  页 | 资讯中心 | 网络学院 | 天新汽车 | 天新手机 | 天新游戏 | 软件开发 | 考试认证
品 牌 机 | 笔 记 本 | 服 务 器 | 天新数码 - DC - DV - MP3 - MP4 - GPS - TV | 数字家庭
硬件 DIY - 主板 - CPU - 内 存 - 硬 盘 - 显示器 - 显卡 - 光驱 - 机箱 - 键鼠 - 网络设备
办公设备 | 打 印 机 | 扫 描 仪 | 投 影 仪 | 一 体 机 | 传 真 机 | 路 由 器 | 交 换 机
软件下载 | 驱动下载 | 游戏下载 | 源码下载 | 教程下载 | 站长在线 | 产品中心 | 报价中心
开发首页 | 开发语言 | .Net开发 | Java开发 | Web开发 | 数据库开发 | 移动开发 | 游戏开发 | 企业开发 | 操作系统 | 软件工程
VB VC Delphi PB BCB C++ - ASP.net C# VB.net - J2EE J2SE J2ME EJB - ASP PHP JSP CGI - MSSQL Oracle DB2 MySQL - CodingLife
  开发语言首页 | VB开发 | VC开发 | VFP开发 | Delphi开发 | Power Builder | C++ Builder | C/C++ | 汇编
  您现在的位置:天新网 > 软件开发 > 开发语言 > C/C++
C++计算四则表达式的模板
http://dev.21tx.com 2007年09月21日 雨中飞燕

每日文章精萃
.Net:Remoting的事件机制(带具体例子) Java:实现HTMLEncode功能的bean
ASP:解决在ASP中执行数据库查询中的特殊 PHP:正则表达式系统教程(六)
JSP:由http暗藏通道看网络安全 CGI:Perl教学 第一篇 概述
VB:利用控件可以设计异形窗体 VC:VC编程制作系统托盘程序

  在9月8日那天我特意编写给大家分享的,一个很方便的C++函数模板,可以并且只可以计算含括号的四则表达式,只有一个函数接口: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;
  }

  然后编译执行就可以了。

  其它:TC++上一定编译错误,不保证在VC6上也能通过编译。

  建议使用VC7或VC更高版本,或者使用GNU C++编译。

上一篇: C&C++论战之C++真的还有未来吗?
下一篇: 瘦身前后——兼谈C++语言进化

编辑推荐
相关内容
·取长补短:Simulink与VC++6.0接口比较 (1
·解决出现的LNK2005“符号已定义”错误 (1
·体验C++中接口与实现分离的技术 (1)
·C++类型转换时定义非成员函数 (1)
·C/C++中的结构体
·利用管道进行进程的通信示例
·理解C++面向对象程序设计中的抽象理论
·C++面向对象编程入门:构造函数与析构函数
·C++面向对象编程入门:类(class)
·C语言中的面向对象(1)-类模拟和多态,继承
·C和C++里面的lvalue 和 rvalue的释义
·C/C++中多维数组指针作为函数参数传递
·C++类对象的深拷贝、浅拷贝构造函数
·C语言程序编辑学习篇—编程者说之C语言
·编程软件系列之C++编程技巧
·算24点程序:面向过程与面向对象的C++
·用C语言技术进行CGI程序设计
·共享软件中注册部分的简单实现
·在C语言中以编程的方式获取函数名
·More Effective C++之智能指针
最近更新
人气最热
·C&C++论战之C++真的还有未来吗?
·瘦身前后——兼谈C++语言进化
·《C++0x漫谈》系列之:右值引用
·C++ builder 的文件读写操作总结
·C++的明天——以及明天的明天
·Vista后,C++ Builder 2007托管还是原生?
·使用Rational进行C++转换的技巧
·神话与谬误:争论C++前你应当知道什么
·初学者,你应当如何学习C++以及编程
·内存调试技巧:C 语言最大难点揭秘
·线性表的顺序表示和实现
·C&C++论战之C++真的还有未来吗?
·利用C++实现的贪吃蛇游戏
·初学者,你应当如何学习C++以及编程
·C++的明天——以及明天的明天
·队列
·内存调试技巧:C 语言最大难点揭秘
·文本模式下的GUI设计,使用tc2.0 (1)
·结构体数组的定义和引用
·C语言五子棋算法

 
·[硬件]难得见面 创新Audigy4声卡标准版接触
·[数码]微硬盘先锋 三星YH-820画廊
·[汽车]东风本田CR-V暗降1.5万元 售价22.48万
·[开发]运用.NET+SQL Server2005构建多层网站(
·[资讯]IBM节约成本拟大幅增加印度员工 遭到抗
·[游戏]CIG2005 山东赛区决赛花絮(一)
·[本本]本本奸商自白:只有想不到 没有做不到
·[办公]赢康科技2006年音视频系统技术巡回研讨
·[手机]权衡利害 高通对诺技术许可态度强硬
·[考试]河北省高考报志愿咨询会6月24日举行
·[学院]金山毒霸的几个技巧
·[娱乐]拿奶酪
 

关于我们 | 联系我们 | 广告服务 | 工作机会 | 版权声明 | 欢迎投稿 | 网站地图
Copyright © 2000-2008 , www.21tx.com , All Rights Reserved .
© 晨新科技 版权所有 Created by TXSite.net