免费注册 | 休息吧
中国在线招生
 首 页 新闻资讯  高校招生  职业技校  培训机构  资格认证  高级研修  你问我答  教育博客
         公告:欢迎光临中国在线招生网站,2008全新改版,为各类学校提供更为优质的服务
2008年外教英语夏令营
  您所在的位置:首页  > 培训机构 > IT培训资料 >  学习C++技巧(写个括号错误查找的问题)
 

学习C++技巧(写个括号错误查找的问题)

2008-10-15 文章来源:考试大  责任编辑:飞轮海 字体: [ ]
      //用栈来实现
  //遇到左括号压栈
  //遇到右括号弹栈.并匹配,若不匹配出错
  //处理完后,若栈不位空,表示出错
  //注意问题:
  //1。出栈时没有考虑堆栈下溢的情形:类似"())))"的输入必然导致程序崩溃!
  #include<iostream>
  #include <cmath>
  #include<fstream>
  #include <stack>
  #include <list>
  using namespace std;// 在VC中c++无法用ios::nocreate,而用.h无法用exit
  struct bracket
  {
  char bk;
  int row;
  int line;
  }A={'{',0,0},B={'[',0,0},C={'(',0,0},a={'}',0,0},b={']',0,0},c={')',0,0};
  int dis=3;
  int main()
  {
  stack <bracket, list<bracket> > istack;
  bracket X;
  int row=1,line=0;
  ifstream infile("f.cpp",ios::in/*|ios::nocreate*/);//定义输入文件流对象,以输入方式打开磁盘文件f.cpp
  if(! infile)
  {
  cout<<"open error!"<<endl;
  return 0;
  //exit(1);
  }
  for(int i=0;i<200;i++)
  {
  X.bk=infile.get();
  line++;
  if(X.bk=='"')
  //////////////////////////////////////////////////////////////////
  // 进栈前去掉" " ' '的当作字符的括号首先//想到infile.ignore(n,'/*'),跳过,但无法计R各L,
  //用while(){infile.ignore();line++},
  //又会在当引号里字符奇偶性会可能// 导致"被跳过,没有终止条件,对奇偶判//断显得复杂了
  //用Continue结束实现
  while(infile.get()!='"')
  {
  continue;
  line++;
  }
  
  if(X.bk==39)
  // infile.ignore(20,39);
  while(infile.get()!=39)
  {
  continue;
  line++;
  }
  if(X.bk=='\n')//字符回车时行加1,列归0
  {
  row++;
  line=0;
  }
  if (X.bk==A.bk||X.bk==B.bk||X.bk==C.bk) //读到左括号进栈
  {
  X.row=row;
  X.line=line;
  istack.push(X);
  }
  //cout<<istack.size()<<endl;
  if(X.bk==a.bk||X.bk==b.bk||X.bk==c.bk) //读到右括号出栈
  {
  if(istack.size()==0) //栈为空时当前括号出错
  {
  cout<<X.bk<<" 坐标:"<<"x"<<row<<",y"<<line<<endl;
  dis=3;
  }
  else
  {
  X.row=row;
  X.line=line;
  dis=fabs(X.bk-istack.top().bk);//
  //Examda提示:当括号能匹配时出栈'('=40, ')'=42,'['=91,']'=93,'{'=123,'}'=125利用这个关系
  if(dis<=2) //
  { //
  istack.pop(); //匹配时出栈
  } //
  else
  {
  cout<<istack.top().bk<<" 坐标:"<<"x"<<istack.top
  ().row<<",y"<<istack.top().line<<endl;
  cout<<X.bk<<" 坐标:"<<"x"<<row<<",y"<<line<<endl;
  istack.pop();
  }
  }
  }
  }
  if(dis<=2&&istack.size()==0)
  {
  cout<<"It's OK!"<<endl;
  return 0;
  }
  while(istack.size()!=0)
  {
  cout<<istack.top().bk<<" 坐标:"<<"x"<<istack.top().row<<",y"<<istack.top
  ().line<<endl;
  istack.pop();
  }
  infile.close();
  return 0;
  }
相关新闻
· Linux文件权限的设置技巧
· 对Linux网络协议栈结构的理解
· ubuntu8.04系统混音的解决
· SQL数据库开发一些精典的代码
· “时间管理”无线路由器不能忽视的
· 攻击漏洞不用愁几招路由器设置巧防
· 关于移动IP的功能实体的介绍说明
· 文件服务器权限设计实用招数
· realplayer常见问题解答
· 给网管员减负网络维护切换系统自己
最近更新
· 全国各省市自考官方网址
· 全国各省市自学考试报名收费标准
· 自考报考人数逐年萎缩
· 浙江10月自考:会计专业报考突破万
· 60名老师17万津贴变白条 学校就是不
· 退学:大学生自动退学率逐年升高
· 怎样规划你的职业生涯
· 大学毕业 去小餐馆当上了服务员
· 重点线与本科线是什么
· 录取最低分数线是什么
 
热门院校推荐
· 甘肃金岛汽车职业技术学校
· 深圳启程教育集团
· 山东星火学院
· 哈尔滨嘉信会计学校
· 哈尔滨鹰舞舞蹈学校
· 哈尔滨市科海微机外语财会学校
· 哈尔滨创意电脑职业技能培训学校
· 黑龙江李枫美容职业技能培训学校
· 塔城地区中等职业技术学校
· 新疆轻工职业技术学院
· 甘肃庆阳市华音DJ音乐工作室
· 上海向阳生涯管理咨询有限公司
· 哈尔滨唯美设计学校
· 黑龙江新希望职业技能培训学校
· 哈尔滨女王美容美发化妆学校
· 哈尔滨绿豆豆英语学校
· 哈尔滨市劳动和社会保障局技工学校
· 哈尔滨智邦培训
· 新疆机电职业技术学院
· 阿克苏地区技工学校
 
 
 
     
浙江 广东 湖北 黑龙江
安徽 河南 重庆 北京
天津 辽宁 上海 江苏
福建 江西 吉林 河北
湖南 山东 四川 更多>>
赞助广告
最新招生信息
热点新闻
 
高校信息
Zsol.org | 本站承诺 | 战略伙伴•招生分站点 | 友情链接 | 付款方式 | 广告业务 | 联系我们
Copyright © 2005-2008 中国在线招生 | 运营商:杭州骄羽科技有限公司 浙ICP备06036992号
增值电信业务经营许可证:浙B2-20080090