Подсветка элементов языка Pasal: ключевые слова, строки, коментарии и цифры.

Всем категорическое «здравствуйте!». Есть одно интересное(на мой взгляд) задание. Его суть описана здесь.
Мой код уже написан. Но он проходит только 5 тестов. Ошибка на 6. После недолгих поисков на обсуждениях данного задания нашёл:

If you have WA on test #6 pay attention on the:
slashes are the part of the comment while line feed is not

Для тех, кому лень переводить:

Если у вас ошибка на тесте №6, то обратите внимание:
Косые черты являются частью комментария, но перевод строки нет.

Мне кажется, что моя программа правильно обрабатывает комментарии такого вида, может вы найдёте, в чём проблема?
Код:


#include <iostream>
#include <cstring>
#include <cctype>

using namespace std;

const int MaxSourceSize = 100000;
const int MaxBuffSize = 1000;
const int nKeyWord = 36;

const char *comment_start = "<span class=comment>";
const char *keyword_start = "<span class=keyword>";
const char *string_start = "<span class=string>";
const char *number_start = "<span class=number>";
const char *end_teg = "</span>";

const char KeyWords[nKeyWord][sizeof( "implementation" )] = {
                          "and", "array", "begin",
                          "case", "class", "const",
                          "div", "do", "else",
                          "end", "for", "function",
                          "if", "implementation", "interface",
                          "mod", "not", "of",
                          "or", "procedure", "program",
                          "record", "repeat", "shl",
                          "shr", "string", "then",
                          "to", "type", "unit",
                          "until", "uses", "var",
                          "with", "while" };
int main()
{
    register int i, j, g;
    char source[MaxSourceSize];
    cin.get ( source, MaxSourceSize, 0 );
    cin.ignore();
    for ( i = 0; source[i]; i++ )
    {
        if ( isalpha ( source[i] ) || source[i] == '_' )
        {
            char buff[MaxBuffSize];
            bool itKeyWord = false;
            for ( g = i, j = 0; isalnum ( source[g] ) || source[g] == '_'; g++, j++ )
                buff[j] = tolower ( source[g] );
            buff[j] = 0;
            for ( j = 0; j < nKeyWord; j++ )
                if ( !strcmp ( buff, KeyWords[j] ) )
                {
                    itKeyWord = true;
                    break;
                }
            if ( itKeyWord ) cout << keyword_start;
            for ( i; isalnum ( source[i] ) || source[i] == '_'; i++ )
                cout << source[i];
            i--;
            if ( itKeyWord ) cout << end_teg;
        }
        else
        {
            if ( isdigit ( source[i] ) )
            {
                cout << number_start;
                for ( i; isdigit ( source[i] ) || ( source[i] == '.' && source[i+1] != '.' ); i++ )
                    cout << source[i];
                i--;
                cout << end_teg;
            }
            else
            {
                switch ( source[i] )
                {
                    case '{':
                        {
                            int in = 0;
                            cout << comment_start;
                            for ( ; ; i++ )
                            {
                                if ( source[i] == '{' ) in++;
                                else if ( source[i] == '}' )
                                {
                                    in--;
                                    if ( !in )    {cout << source[i];break;}
                                }
                                cout << source[i];
                            }
                            cout << end_teg;
                        };break;
                    case '\\':
                        {
                            if ( source[i+1] == '\\' )
                            {
                                cout << comment_start;
                                for ( i; source[i] != '\n'; i++ )
                                    cout << source[i];
                                cout << end_teg;
                                i--;
                            }
                            else
                            {
                                cout << '\\';
                            }
                        };break;
                    case '\'':
                        {
                            cout << string_start;
                            cout << source[i++];
                            for ( i; source[i] != '\''; i++ )
                                cout << source[i];
                            cout << source[i];
                            cout << end_teg;
                        };break;
                    case '#':
                        {
                            cout << string_start;
                            i++;
                            cout << "#";
                            for ( i; isdigit ( source[i] ) || ( source[i] == '.' && isdigit ( source[i+1] ) ); i++ )
                                cout << source[i];
                            cout << end_teg;
                            i--;
                        };break;
                    default:
                        {
                            cout << source[i];
                        };break;
                }
            }
        }
    }
    return NULL;
}


В задаче слэши коммента прямые, а ты отлавливаешь обратные.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.