| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2286 人关注过本帖
标题:[讨论]C语言的注释的删除!
只看楼主 加入收藏
yangzhifu
Rank: 1
等 级:新手上路
威 望:2
帖 子:433
专家分:0
注 册:2007-4-11
收藏
 问题点数:0 回复次数:14 
[讨论]C语言的注释的删除!
编写一个C程序来删除另一个程序中的注释,要正确处理带引号的字符串与字符常量
在另一个C程序中没有注释的嵌套!
我稍后给出我的答案!
搜索更多相关主题的帖子: C语言 注释 删除 
2007-11-15 10:43
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
寻找到/*后在发现第一个*/前将所有内容删除就可以了

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-11-15 19:31
無邪的睡脸
Rank: 2
等 级:等待验证会员
威 望:1
帖 子:344
专家分:13
注 册:2007-9-11
收藏
得分:0 
我在百度面试时遇到这题。不过注释有两种/**/和//的,当时要我画出有穷状态机!只考虑/**/不全面吧!
2007-11-15 19:50
chengyukyo1
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2007-10-18
收藏
得分:0 

w我等下看天方夜谭 理解这题目 菜鸟1个 还不会飞

2007-11-15 20:24
codelet
Rank: 2
来 自:广东深圳
等 级:论坛游民
帖 子:61
专家分:37
注 册:2007-11-6
收藏
得分:0 

我的答案,很乱,请楼主公布下你的?
#include <stdio.h>
#include <stdlib.h>
#define N 1024

FILE* Openfile(char* filename,char* mode)
{
FILE *result;
result = fopen(filename,mode);
if(result == NULL)
{
cout << "不能打开文件:" << filename << ". " << endl;
exit(1);
}
return result;
}

void source(char infilename[],char outfilename[])
{
FILE* infp = Openfile(infilename, "r+");
FILE* outfp = Openfile(outfilename, "w+");
//flag为真则表明是注释
int flag = 0, flag1 = 1;
char ch, nch, str[N];
while(!feof(infp))
{
ch = fgetc(infp);
if(!flag)
{
if(ch == '/')
{
nch = fgetc(infp);
if(nch == '*')
flag = 1;
else if(nch == '/')
{
flag1 = 0;
fgets(str,N,infp);
fputs("\n",outfp);
}
else
ungetc(nch,infp); //若还不是注释,退格一个字符
}
}
if((!flag) && flag1)
{
if(ch!= EOF)
fputc(ch, outfp);

}
flag1 = 1;
if(flag)
{
if(ch == '*')
{
nch = fgetc(infp);
if(nch == '/') //出现了“*/”,注释结束
flag = 0;
else
ungetc(nch, infp); //若还是注释,则要退格一个字符
}
}
}
fclose(infp);
fclose(outfp);
}


Losing emotion, Finding devotion.
2007-11-16 09:14
codelet
Rank: 2
来 自:广东深圳
等 级:论坛游民
帖 子:61
专家分:37
注 册:2007-11-6
收藏
得分:0 
另外我还有一个提取源文件中的注释的程序,也都很乱,实现思路跟上面差不多,就不发了

Losing emotion, Finding devotion.
2007-11-16 09:17
hujf_go
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2006-5-13
收藏
得分:0 
北电笔试的题目,要求把一个程序里的/* */类型的注释清除掉,但是不清除//类型的注释… 不过北电是英文题

[此贴子已经被作者于2007-11-16 17:48:59编辑过]



天未塌,我还在,就让风雨迎面来~
2007-11-16 12:59
万兽无缰
Rank: 1
等 级:新手上路
威 望:1
帖 子:296
专家分:0
注 册:2007-8-27
收藏
得分:0 
//把这一行中//以后的都删除不就行了~~

女朋友问我想怎么死~~~
             我说我想"爽死"
2007-11-16 13:10
qq95620412
Rank: 1
等 级:新手上路
帖 子:81
专家分:0
注 册:2007-11-5
收藏
得分:0 

用栈来解决


人生路难走,转眼已白头。伤心望远山,黯然下小楼。
2007-11-16 20:52
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 

不需要栈,因为题目说没有嵌套。这是我的答案……

[CODE]void progress(char* str){
char *beg,*tmp,rt=0;
while(*str){
if(*str=='\"'){
while(*++str!='\"')
if(*str=='\\')str++;
str++;
}else if(rt==0 && *str=='/'){
beg=str++;
if(*str=='*' || *str=='/')
rt=(str=='*')+1;
}else if( (rt==1 && *str=='\n') ||
(rt==2 && (*str=='*' && *++str=='/')) ){
tmp=beg;str++;
while(*beg++=*str++);
str=tmp;rt=0;
}else
str++;
}
}[/CODE]
有点乱。rt代表是否注释,为1代表是新式的//注释,为2代表是旧式的/*...*/对于字符串有简要的判断。下面是测试函数:
[CODE]int main(){
char str[]="//注释1\nvoid main(){\n /*注释2*/\n printf(\"/*这不是注释*/\");\n /*注释3\n //我在注释3里面\n */\n}\n";
printf(str);
printf("\n***********************\n");
progress(str);
printf("\n***********************\n");
printf(str);
getchar();
return 0;
}[/CODE]


专心编程………
飞燕算法初级群:3996098
我的Blog
2007-11-17 01:56
快速回复:[讨论]C语言的注释的删除!
数据加载中...
 
   



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

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