括号匹配C++程序.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
括号匹配C程序

#include iostream #include string #include stack #include fstream using namespace std; ///////////////////////////////////////////// //CBalance类 //此类对于一般的C++或者C文件进行括号匹配检查 //文件可以有注释,字符串…… //字符串常量不可以跨行 //my.h定义了常用的类库 //////////////////////////////////////////// class CBalance { private: ifstream fin; //文件流 int nCurrentLine; //正在处理的行号 int nErrors; //已发现的错误数 struct CSymbol //此类记录遇到的字符和字符的行号 { char cToken; int nTheLine; }; enum CommentType {SlashSlash , SlashStar};//记录//和/*两中注释方式 //CheckBalance()函数的工具类 //CheckMatch函数用于比较两个符号是否匹配 bool CheckMatch(char char1, char char2, int nLine1, int nLine2); //GetNextSymbol函数用于返回读到的括号 char GetNextSymbol(void); //PutBackChar用于把字符重新返还给文件流 void PutBackChar(char char1); //SkipComment根据注释符的不同跳过源文件的注释 void SkipComment(enum CommentType type); //SkipQuote函数用于跳过源文件中的字符串和字符常量 void SkipQuote(char type); //NextChar函数用于得到下一个字符 char NextChar(void); public: CBalance(const char* filename); //构造函数 int CheckBalance(); //检查fin中的字符是否匹配 }; class noFile{}; //定义的异常类,当函数不存在的时候抛出异常 CBalance::CBalance(const char* filename) { fin.open(filename); if(!fin) throw noFile(); nCurrentLine = 1; nErrors = 0; } int CBalance::CheckBalance() { struct CSymbol node; //符号与行号 tackCSymbol st; //定义的符号栈 char LastChar,Match; //LastChar为读入的符号,Match为栈顶的字符 while(LastChar = GetNextSymbol())//从文件中读取括号字符,直到文件结束 {//while_beigin switch (LastChar) { //switch_beigin case (: case [: case {: //遇到这三种符号要进栈 node.cToken = LastChar; node.nTheLine = nCurrentLine; st.push(node); break; case ): case ]: case }://遇到这三种括号要进行比较 if(st.isEmpty()) { nErrors++; cout在第nCurrentLine有一个多余LastCharendl; } else { node = st.pop(); Match = node.cToken; if(!CheckMatch(Match,LastChar,node.nTheLine,nCurrentLine)) nErrors++; } break; }//switch_end }//while_end while(!st.isEmpty()) //栈中多余的符号 { nErrors++; node = st.pop(); cout第node.nTheLine行的符号node.cToken不匹配endl; } re

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档