返回信息流数据结构的题,要求是写个程序检查文档中的括号是否有不匹配的情况,用堆栈。
现在程序做是做出来了,但是自己想添加一些功能,具体就是:遇到双引号或者单引号中的括号时直接忽略。我的做法是
[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]
不知道版上有没有人有好一点的办法解决这个问题呢?
这是一条镜像帖。来源:北邮人论坛 / soft-design / #21905同步于 2007/10/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
[求助]一个读取C语言代码检查不配对括号的程序
yegle
2007/10/24镜像同步13 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
遇到转义字符那就按照转义字符的含义去处理。
不建议你在case '\''的时候就一次性把单引号中的内容处理完。
这种问题最好使用状态机。
先把可能的状态画出来,包括单引号、双引号、注释等等,然后实现状态机就可以了。
http://www.google.com/search?q=%E6%9C%89%E9%99%90%E7%8A%B6%E6%80%81%E6%9C%BA
【 在 yegle 的大作中提到: 】
: 大二,刚开始学数据结构……
具体代码没有看,只是说一下我的想法。
1:初始化栈。
2:读入一个字符。
3:判断读入的字符是不是合法的括号。包括左括号和右括号。其他丢弃。
左括号入栈。
右括号,检查栈定元素是不是和它匹配。否,则证明代码中括号不匹配。
检查栈是不是空,否,证明代码中括号不匹配。
我就是这么做的,但是问题可能遇到的是双引号或单引号中的不配对括号,这个是不应该报错的,但是你的过程中就没检测出来
【 在 redfox 的大作中提到: 】
: 具体代码没有看,只是说一下我的想法。
: 1:初始化栈。
: 2:读入一个字符。
: ...................
栈中可保留这4个符号 ( ' " \
当栈顶为 ( 时,遇到 ) 就出栈
当栈顶为 ' 时,遇到下一个 ' 就出栈
当栈顶为 " 时,遇到下一个 " 就出栈
当栈顶为 \ 时,遇到下一个任意字符就出栈