Как настроить отступ кода в текстовом файле с помощью c ++? - PullRequest
0 голосов
/ 11 октября 2019

Я копирую код файла 1 в файл 2, но я хочу, чтобы код в файле 2 выглядел корректно с отступом следующим образом: в начале отступ = 0, каждая открытая фигурная скобка увеличивает глубину отступа, каждая фигурная скобказакрытый уменьшает отступ на 4 пробела, например. Мне нужна помощь в исправлении этого для работы

char preCh;
int depth=0;
    int tab = 3;
    int d = 0;
    int pos = 0;
    file1.get(ch);
    while(!file1.eof())
    {
            if(ch=='{')
            {
                d++;
            }
            if(ch=='}'){
                d--;
            }
            depth = tab * d;
            if(preCh == '{' && ch=='\n'){
            file2.put(ch);
                for (int i = 0; i <= depth; i++)
                {
                     file2.put(' ');
                }
            }
                else
                file2.put(ch);
        preCh = ch;
        ch = file1.get();
    }
}

результат должен иметь отступ, как в редакторах кода:

int main(){ 
    if(a>0)
    {
       something();
    }
}

1 Ответ

0 голосов
/ 13 октября 2019

Может быть, неожиданно для вас, нет простого ответа на ваш вопрос.

И поэтому ваш код никогда не будет работать.

Первое и самое важное, вы должны пониматьи определить стили отступов. Пожалуйста, смотрите здесь в Википедии . Даже в приведенном вами мини-примере вы смешиваете Allman и K & R. Итак, сначала вы должны уяснить, что использовать.

Затем вы должны знать, что скобки могут появляться в кавычках, двойных кавычках, C-комментариях, C ++ комментариях и, что еще хуже, многострочных комментариях (и #если или #idefs). Это сделает жизнь по-настоящему тяжелой.

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

Пример:

    }

В этой простой строке вы прочтете '}'характер, после того, как вы уже напечатали пробелы. Это всегда приведет к неправильному (слишком правильному) отступу.

Логика только для этого случая была бы сложной. Затем Ant принимает такие утверждения, как

if (x ==5) { y = 3; } } } }

Так что, к сожалению, я не могу дать вам простого решения.

Потребуется парсер, или я просто рекомендую любой вид более красивого или красивого принтера

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...