ksacvet777.moy.su
Главная » Статьи » IT

Удаление из текста комментариев c++ стиля
Функция удаления комментариев стиля c++ из текста. Может быть полезным, например, перед распарсиванием текста. Удаляются и многострочные и однострочные комментарии.





Параметры:

sDest - текста после обработки
sSrc - исходный текст
chRepl - символ, которым будет заменён текст комментария. Если ноль, то комментарии будут просто удалены без всякой замены.





void preprocessCppComments(std::string& sDest, const std::string& sSrc, const char chRepl) 
{
    sDest = "";
    const int SRCLEN = (int)sSrc.length();

    bool bNowOneLineComment = false// in one line comment
    bool bNowMultiLineComment = false// in multi line comment

    for(int c=0; c<SRCLEN; c++) 
    {
        char ch = sSrc[c];

        if( c == SRCLEN-1) 
        {
            // last

            char tmp = sSrc[c+1];
            int _end =0;
        }

        if(bNowMultiLineComment) 
        {
            if( (ch == '*') && ( sSrc[c+1] == '/' ) )
            {
                // multi comment end
                bNowMultiLineComment=false;
                c++;

                if(chRepl)
                {
                    sDest += chRepl;
                    sDest += chRepl;
                }

                continue;
            }
        }

        if(bNowOneLineComment) 
        {
            if( ch == '\n' ) 
            {
                // end one line comment
                bNowOneLineComment=false;

                if(chRepl)
                {
                    sDest += '\n';
                }

                continue;
            }    
        }


        if(ch == '/'
        {
            if( sSrc[c+1] == '/' ) 
            {
                // begin one line comment
                bNowOneLineComment=true;
                c++;

                if(chRepl)
                {
                    sDest += chRepl;
                    sDest += chRepl;
                }

                continue;
            }

            if( sSrc[c+1] == '*' ) 
            {
                bNowMultiLineComment=true;
                c++;

                if(chRepl)
                {
                    sDest += chRepl;
                    sDest += chRepl;
                }

                continue;            
            }

        }// if(ch == '/')

        if ( bNowOneLineComment || bNowMultiLineComment )
        {

            if(chRepl)
            {
                if(ch == '\t') { sDest += '\t'; }
                else 
                    if(ch == '\n') { sDest += '\n'; } 
                    else if(ch == ' ') { sDest += ' '; } 

                    else
                        sDest += chRepl;

            }

            continue
        }

        sDest += ch;

    } // for

}







Категория: IT | Добавил: ksacvet777 (29.01.2014)
Просмотров: 415 | Теги: Remove, Function, Parser, Comment | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *: