/* 删除源代码中的注释(/* ... * /形式) *
* 采用最原始的思路和方法实现 */
#include
#include
int main(int argc, char * argv[])
{
char source[]="#include ///***ab///*cdef***/***\n#include \"stdlib.h\"\n \nint main(int argc, char * argv[])\n{\n\tint a = 9; \n/*laf*/\n\tprintf(\"/*OK*/%d\\n,\", a); \n\treturn 0;\n}"; /*原始代码*/
char target[1024] = {'\0'}; /* 过滤注释后的代码*/
int len = 0;
int i = 0;
int j = 0;
char firstChar;
char secondChar;
char stringSign;
while(source[i++])
len++ ; /* 求source 串的串长*/
printf("%s\n", source); /* 显示原始代码 */
/* 按字符扫描原始代码并处理*/
for(i = 0,j = 0; i
firstChar = source[i];
secondChar = source[i+1];
stringSign = source[i]; /* 字符串常量标识 */
if(stringSign!='\"')
if(firstChar!='/') /*复制非注释字符*/
target[j++]=firstChar;
else
if( secondChar =='*'){ /* 扫描到连续的/字符和*字符,进入注释*/
i=i+2;
while(1){
if((firstChar = source[i])!='*')
i++; /* 过滤注释字符 */
else
if((secondChar=source[i+1])!='/')
i++;
else
break; /* 扫描到连续的*字符和/字符 注释部分结束*/
};
firstChar = source[++i];/* 过滤注释部分的最后的字符/ */
}
else
target[j++]=firstChar; /*复制单独的/字符后的非注释字符*/
else{
do{
target[j++]=stringSign;
stringSign=source[++i];
}while(stringSign!='\"'); /*复制字符串*/
target[j++]=stringSign;
}
}
target[j]='\0';
printf("\n\n\n%s\n", target);
system("pause");
}