"Напишите программу, которая удаляет все комментарии из программы на С++. Это значит,надо читать символы из cin
и удалять комментарии двух видов: //
и /* */
. Получившийся текст запишите в cout. Не заботьтесь о красивом виде получившегося текста(это уже другая,более сложная задача). Корректность программ неважна. Нужно учитывать возможность появления символов //
/*
и */
в комментариях,строках и символьных константах."
- Задачка из книжки Бьерна Страуструпа.
Вопросы:
if (ch[i] = '/' && ch[i+1] = '/')
, но такой вариант будет стирать бэкслэши и из строк("") в том числе. Как исправить этот косяк?Ну, вам же пишут - "надо читать символы из cin
" - так почему бы не использовать функцию посимвольного чтения get()
? По-моему, намек более чем очевиден.
Самая простая логика - детерминированный конечный автомат :) Вводим переменную состояния, принимающую значения (хоть перечисление :)) - обычный текст, предкомментарий, комментарий (2 шт.), строка, символьная константа. Можно еще некоторые промежуточные состояния - будет легче работать. Дальше - при прочтении одного символа (надо еще хранить предыдущий) работаем примерно так (набросок, надо поточнее) -
Мы в основном состоянии. Это кавычка? Предыдущий - \
? просто выводим их. Нет? Переходим в состояние строки, выводим, идем дальше. Это начало комментария? Переходим в состояние предкомментария, символ запоминаем. Это просто обычный символ? запомнить, вывести.
Мы в состоянии предкомментария. Это слеш или звездочка? Если да - игнорируем символ, переходим в состояние комментария. Если нет - переходим в основное состояние, идем в обработку символа в основном состоянии, сохраненный выводим...
Мы в состоянии строки. Это кавычка? Да - переходим в основное состояние. Символ выводим в любом случае...
Мы в состоянии комментария //
. Это символ новой строки? переходим в основное состояние, символ выводим. Нет - символ игнорируем.
Ну, и так далее - все возможные состояния и символы. Распишите картинку с переходами - вам сразу все станет понятнее... Да, она не самая простая, но и не такая уж и сложная.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Нужно написать драйвер блокировать создание файла, пробую через Minifilter, но ничегоПолучается видеть только мониторинг процессов (создание,...
Всем добрый деньПосмотрел много вариантов решения проблемы но что то ничего не помогает
Подскажите, как задать точность вывода float/double числа через printf?