ImageVerifierCode 换一换
格式:DOC , 页数:5 ,大小:24.50KB ,
资源ID:11402968      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-11402968.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(括号匹配C++程序.doc)为本站会员(HR专家)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

括号匹配C++程序.doc

1、#include #include #include #include using namespace std;/CBalance类/此类对于一般的C+或者C文件进行括号匹配检查/文件可以有注释,字符串/字符串常量不可以跨行/my.h定义了常用的类库/class CBalanceprivate:ifstream fin; /文件流int nCurrentLine; /正在处理的行号int nErrors; /已发现的错误数struct CSymbol /此类记录遇到的字符和字符的行号char cToken;int nTheLine;enum CommentType SlashSlash , S

2、lashStar;/记录/和/*两中注释方式/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 ty

3、pe);/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();nCurr

4、entLine = 1;nErrors = 0;int CBalance:CheckBalance()struct CSymbol node; /符号与行号stack st; /定义的符号栈char LastChar,Match; /LastChar为读入的符号,Match为栈顶的字符while(LastChar = GetNextSymbol()/从文件中读取括号字符,直到文件结束/while_beiginswitch (LastChar) /switch_beigincase (:case :case : /遇到这三种符号要进栈node.cToken = LastChar;node.nTh

5、eLine = nCurrentLine;st.push(node);break;case ):case :case :/遇到这三种括号要进行比较if(st.isEmpty()nErrors+;cout在第nCurrentLine有一个多余LastCharendl;elsenode = st.pop();Match = node.cToken;if(!CheckMatch(Match,LastChar,node.nTheLine,nCurrentLine)nErrors+;break;/switch_end/while_endwhile(!st.isEmpty() /栈中多余的符号nError

6、s+;node = st.pop();cout第node.nTheLine行的符号node.cToken不匹配endl; return nErrors;bool CBalance:CheckMatch(char char1, char char2, int nLine1, int nLine2)if(char1=(&char2!=)|char1=&char2!=|char1=&char2!=)cout发现第nLine2的符号char2与第nLine1的符号char1不匹配endl;return false;return true;char CBalance:GetNextSymbol() ch

7、ar ch;while(ch=NextChar()if(ch=/)ch=NextChar();if(ch=/)SkipComment(SlashSlash);else if(ch=*)SkipComment(SlashStar);else PutBackChar(ch);else if (ch=|ch=)SkipQuote(ch);else if (ch=|ch=|ch=(|ch=|ch=|ch=)return ch;return NULL;char CBalance:NextChar()char ch;if(ch=fin.get()=EOF)return NULL;if(ch=n)nCurr

8、entLine+;return ch;void CBalance:PutBackChar(char char1)fin.putback(char1);if(char1=n) nCurrentLine-;void CBalance:SkipQuote(char type)char ch;while(ch=NextChar()if(ch=type) return;else if (ch=n)nErrors+;cout在第nCurrentLine行缺少匹配的或者endl;else if (ch=)ch = NextChar();void CBalance:SkipComment(enum CommentType type) char ch,flag;if(type=SlashSlash) /对于像/注释一直读到行末尾while (ch=NextChar()&(ch!=n)return;flag=0; /对于像/*这样的注释要不断的读文件while(ch=NextChar()!=NULL)if(flag=*&ch=/)return;flag = ch; int main() try CBalance b(123.txt); /文件要在工程当前目录下 b.CheckBalance(); catch (noFile& file) cout 文件打开失败!endl; return 0;

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报