BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / soft-design / #21905同步于 2007/10/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖

[求助]一个读取C语言代码检查不配对括号的程序

yegle
2007/10/24镜像同步13 回复
数据结构的题,要求是写个程序检查文档中的括号是否有不匹配的情况,用堆栈。 现在程序做是做出来了,但是自己想添加一些功能,具体就是:遇到双引号或者单引号中的括号时直接忽略。我的做法是 [QUOTE]case '\'':{ x++; while((ch=fgetc(fp))!='\''){ if(ch=='\n') { y++; x=0; } else x++; } break; }[/QUOTE] 在读到下一个单引号前直接用fgetc()跳过中间的内容。 测试时发现问题了,在遇到比如说 [QUOTE]while((ch=fgetc(fp))!='\'')[/QUOTE] 这样的语句时,可能会出现单数个引号(这里就是'\'',第三个单引号后直到下一个单引号的内容会被省略)。[em19] 不知道版上有没有人有好一点的办法解决这个问题呢?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
windam机器人#1 · 2007/10/24
遇到转义字符那就按照转义字符的含义去处理。 不建议你在case '\''的时候就一次性把单引号中的内容处理完。 这种问题最好使用状态机。 先把可能的状态画出来,包括单引号、双引号、注释等等,然后实现状态机就可以了。
yegle机器人#2 · 2007/10/24
囧……我看不懂……谁给个“状态机”通俗一点的解释?
windam机器人#3 · 2007/10/24
http://www.google.com/search?q=%E6%9C%89%E9%99%90%E7%8A%B6%E6%80%81%E6%9C%BA
yegle机器人#4 · 2007/10/24
谢!
UnrealT机器人#5 · 2007/10/24
没学自动机? 【 在 yegle (奇峰怪石,秀山丽水) 的大作中提到: 】 : 囧……我看不懂……谁给个“状态机”通俗一点的解释?
yegle机器人#6 · 2007/10/25
大二,刚开始学数据结构…… 【 在 UnrealT 的大作中提到: 】 : 没学自动机?
redfox机器人#7 · 2007/10/25
【 在 yegle 的大作中提到: 】 : 大二,刚开始学数据结构…… 具体代码没有看,只是说一下我的想法。 1:初始化栈。 2:读入一个字符。 3:判断读入的字符是不是合法的括号。包括左括号和右括号。其他丢弃。 左括号入栈。 右括号,检查栈定元素是不是和它匹配。否,则证明代码中括号不匹配。 检查栈是不是空,否,证明代码中括号不匹配。
yegle机器人#8 · 2007/10/25
我就是这么做的,但是问题可能遇到的是双引号或单引号中的不配对括号,这个是不应该报错的,但是你的过程中就没检测出来 【 在 redfox 的大作中提到: 】 : 具体代码没有看,只是说一下我的想法。 : 1:初始化栈。 : 2:读入一个字符。 : ...................
UnrealT机器人#9 · 2007/10/25
栈中可保留这4个符号 ( ' " \ 当栈顶为 ( 时,遇到 ) 就出栈 当栈顶为 ' 时,遇到下一个 ' 就出栈 当栈顶为 " 时,遇到下一个 " 就出栈 当栈顶为 \ 时,遇到下一个任意字符就出栈