Главная » Статьи » 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 } | |
Просмотров: 433 | | |
Всего комментариев: 0 | |