写一个函数,可以处理C++代码,将其中的注释去掉。返回过滤后的字符串的长度。
考虑两种注释:
//comment line
/*comment block*/
#include<stdio.h>
int RemoveComment(char* input,int input_size,char* output)
{
if(!input || !output){printf("argus error \n");return -1;}//参数检查
char* pIn=input;
char* pOut=output;
int output_size=0;
while(input_size)
{
if(*pIn == '/' && *(pIn+1) == '/')
{
while(*pIn != '\n')
{
pIn++;
input_size--;
}
pIn++;//跳过换行符
input_size--;
}
else if(*pIn == '/' && *(pIn+1) == '*')
{
while(*pIn != '*' || *(pIn+1) != '/')
{
pIn++;
input_size--;
}
pIn += 2;
input_size -=2;
if(*pIn == '\n')//跳过注释块后的换行符(如果有的话)
{
pIn++;
input_size--;
}
}
else
{
*(pOut++) = *(pIn++);
output_size++;
input_size--;
}
}
*pOut = '\0';
return output_size;
}
int main()
{
char a[]="AAAAAAAAAA;\n//zhushi!!!!!!!!!!!!!!!!\nBBBBBBBBBB;\n/*zhushi@@@@@@@@@@@@\n@@@@@@@@@*/\nCCCCCCCCCC;";
char b[100];
printf("%s\n================================\n",a);
printf("%s\n\n%d\n",b,RemoveComment(a,sizeof(a),b));
return 0;
}
运行结果