某天在网上看了一个“用C++写个去掉注释的小程序。”的帖子,大家评论相当的多。
想起当时做编译器时也遇过这个问题,
注释有单行注释// 多行注释 /* */
还有,单引号' '内的注释只算的字符内容。
哈哈,把我的解决方法贴上来大家看看。
RemoveComments(string & strSourceCode)
{
const char * str_tp = strSourceCode.c_str();
string temp;
bool flag_1=false, // 单行注释 --
flag_2=false, // 多行注释 /* */
flag_3=false; // 单引号 ' '
for(int i=0; i<strlen(str_tp); i++)
{
switch(str_tp[i])
{
case '/r' :
case '/n' : if(flag_1)
flag_1 = false;
break;
case '/'' : if(!flag_1 && !flag_2)
if(flag_3)
flag_3=false;
else
flag_3=true;
break;
case '/' : if(str_tp[i-1]=='*' && flag_2)
{
flag_2=false;
i++;
break;
}
if(str_tp[i+1]=='*' && !flag_1 && !flag_3)
flag_2=true;
break;
case '-' : if(str_tp[i+1]=='-' && !flag_1 && !flag_2 && !flag_3)
flag_1=true;
break;
}
if(flag_1 ||flag_2)
continue;
temp = temp + str_tp[i];
}
strSourceCode = temp;
}