当前位置: 代码迷 >> C语言 >> 关于滤去注释部分的问题
  详细解决方案

关于滤去注释部分的问题

热度:313   发布时间:2007-01-06 17:39:50.0
关于滤去注释部分的问题
原题是这样的:滤去某个C语言文件中的所有注释部分。

貌似很难判定什么时候开始滤去,如果注释部分中包含有/或*,或程序中有连续的/*就比较麻烦了。。。。

恳请高手帮忙
搜索更多相关的解决方案: 注释  

----------------解决方案--------------------------------------------------------
自己顶一下
----------------解决方案--------------------------------------------------------
再顶  
----------------解决方案--------------------------------------------------------

冷清啊~~~~~~~~


----------------解决方案--------------------------------------------------------
例个例子.
----------------解决方案--------------------------------------------------------
一旦有/*就开始滤,遇到*/就结速
----------------解决方案--------------------------------------------------------
如果像LS说的,printf里面有 /* 或 */怎么办
----------------解决方案--------------------------------------------------------

再加个引号标记就行了,如果是引号外,就去掉,引号外就不去。
不过要注意真引号和假引号,如
printf("/*dfsa*/\"\"dd\n");有假引号,为此,要再引入一个引号标记'\'字符.
这里不需要讨论引号的配对,及/*,*/的配对,因为编译器一般都不对注释符号进行配对。


----------------解决方案--------------------------------------------------------
printf("\/**\/");
----------------解决方案--------------------------------------------------------
刚才断线了会,我正好写了个滤掉注释的,你看看,
有没有什么情况漏掉的,
在c++下运行,纯c没有bool类型,
如果只有c编译器,在头文件加句typedef enum{false,true}bool;也行.
[CODE]#include <stdio.h>
int main()
{
FILE *fp=fopen("1.txt","r+");
char ch;
bool isInQuotation=false,leftSlash=false,rightSlash=false,isStar=false;
while((ch=fgetc(fp))!=EOF)
{
if(ch=='\\')
{
rightSlash=true;
leftSlash=false;
putchar(ch);
}
else if(rightSlash==false&&isInQuotation==false&&ch=='\"')
{
isInQuotation=true;
leftSlash=false;
putchar(ch);
}
else if(rightSlash==false&&isInQuotation==true&&ch=='\"')
{
isInQuotation=false;
leftSlash=false;
putchar(ch);
}
else if(isInQuotation==false&&ch=='/')
{
leftSlash=true;
}
else if(leftSlash==true&&ch=='*')
{
while((ch=fgetc(fp))!=EOF)
{
if(ch=='*')
isStar=true;
else if(ch!='/') isStar=false;
if(isStar==true&&ch=='/')
{
leftSlash=false;
break;
}
}
}
else if(leftSlash==true)
{
putchar('/');
putchar(ch);
leftSlash=false;
}
else
{
putchar(ch);
leftSlash=false,rightSlash=false,isStar=false;
}
}
return 0;
}[/CODE]
----------------解决方案--------------------------------------------------------
  相关解决方案