| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 1199 人关注过本帖
标题:修改后:删除C源文件注释
只看楼主 加入收藏
ICU
Rank: 4
等 级:业余侠客
威 望:2
帖 子:92
专家分:268
注 册:2017-1-14
  得分:0 
回复 8楼 renkejun1942
字符串以第一个"开头,结尾不能以分号或者回车作为结束的判断,必须以第二个非\"的"字符作为结束符
2017-02-09 12:10
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:28
帖 子:1627
专家分:5219
注 册:2016-12-1
  得分:0 
回复 10楼 九转星河
全部读取的确是最好的办法,但太恐怖了。

现在的修改版本就是这样。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-02-09 12:45
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:28
帖 子:1627
专家分:5219
注 册:2016-12-1
  得分:0 
回复 11楼 ICU
是的,但是前几次我以双引号做为结束判断,总会出些小问题,所以一气之下干脆弄成以逗号或分号做结束判断。

现在的修改版是以双引号最结束,并且在遇到反斜杠的时候表示遇到的分号是一个转义字符。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-02-09 12:47
ICU
Rank: 4
等 级:业余侠客
威 望:2
帖 子:92
专家分:268
注 册:2017-1-14
  得分:0 
还是要用编译器对注释语句的判断方法,不能怕麻烦。
这里有一个小程序,实际意义不大,但值得思考,也可以用来适当放松一下:

#include<stdio.h>
int main()
{
char *a="#include<stdio.h>%cint main()%c{%cchar *a=%c%s%c;%cprintf(a,10,10,10,34,a,34,10,10,10);%creturn 0;%c}";
printf(a,10,10,10,34,a,34,10,10,10);
}


写程序要先确定程序框架和思路,不要把自己陷在杂乱的代码中。
就像斯诺克台球的精神,大布局为上,小技巧次之,累了喝杯水。
2017-02-09 12:58
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:28
帖 子:1627
专家分:5219
注 册:2016-12-1
  得分:0 
回复 14楼 ICU
编译器是怎么处理注释的?还真不知道。

我已经很放松了,我本来最近几天都没想动手修改的,只是今天在看《计算机科学导论》的时候,不知道看到什么了,然后莫名其妙觉得自己有思路了,然后才来动手修改。

[此贴子已经被作者于2017-2-9 13:04编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-02-09 13:03
ICU
Rank: 4
等 级:业余侠客
威 望:2
帖 子:92
专家分:268
注 册:2017-1-14
  得分:0 
基本假设是,源程序的语法完全符合。然后再分析注释的逻辑关系:
1.两个注释方式有没有优先级?实际情况是有优先级的
2.两种注释方式的结束符都是什么?注意//的结束符是回车;而/*是可以跨行的
3.字符串中的任何形如注释的字符都不能当成注释

所以根据以上规则,逻辑顺序可以为:
1.排除所有字符串;(允许跨行)
2.首先检测/**/格式的注释(允许跨行)
3.再检测//---【回车】格式的注释(当然不允许跨行)
2017-02-09 13:43
ICU
Rank: 4
等 级:业余侠客
威 望:2
帖 子:92
专家分:268
注 册:2017-1-14
  得分:0 
中间看到你的程序中检查分号,这其实与注释是无关的。
2017-02-09 13:53
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:28
帖 子:1627
专家分:5219
注 册:2016-12-1
  得分:0 
回复 17楼 ICU
没有检查分号啊?你是不是看错了什么?

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-02-09 13:56
ICU
Rank: 4
等 级:业余侠客
威 望:2
帖 子:92
专家分:268
注 册:2017-1-14
  得分:0 
你在5楼提到“这不是判断的问题,那是读取字符串的问题,因为读取是到分号作为结束。”看来我理解有问题
2017-02-09 14:07
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:197
帖 子:6566
专家分:28962
注 册:2014-5-20
  得分:7 
3.再检测//---【回车】格式的注释(当然不允许跨行)
试试这个:
int i=0; //注释\
定义i\
并初始为0


2017-02-09 14:10







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026373 second(s), 8 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved