Удаление комментариев - C (СИ)
Формулировка задачи:
Здравствуйте!
Пишу программу для удаления комментариев из программ. Вот кусочек кода.
Проблема такая: при удалении комментариев вида /**/ остаётся последний /
Подскажите, пожалуйста, как это исправить.
for (i = 0; i < N; i++) { if (inm[i] == '/') { if (inm[i + 1] == '*') { while ((inm[i] != '*') && (inm[i + 1] != '/')) { inm[i] = 0; inm[i + 1] = 0; i++; } } else if (inm[i + 1] == '/') { while (inm[i] != '\n') { inm[i] = 0; i++; } } } }
Решение задачи: «Удаление комментариев»
textual
Листинг программы
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #define size 256 int main() { char array[size]; scanf("%s", array); int is_com = 0; int len = 0; for (; array[len] != '\0';) len++; for (int i = 0; array[i + 1] != '\0' && array[i] != '\0' && i < len; i++) { if (array[i] == '/' && array[i + 1] == '/') is_com = 1; if (array[i] == '/' && array[i + 1] == '*') is_com = 2; while (is_com == 1 && array[i] != '\0') { i++; } if (is_com == 2) { i += 2; while (array[i] != '*' && array[i + 1] != '/') i++; i += 2; } is_com = 0; printf("%c", array[i]); } printf("\n"); system("pause"); return 0; }
Объяснение кода листинга программы
- Удаление комментариев из строки, введенной пользователем.
- Используется два массива: массив-строка и массив-дополнительная переменная для хранения индексов.
- Первая строка: инициализация массива-строки пустой строкой.
- Вторая строка: считывание строки с помощью функции scanf.
- Третья строка: инициализация дополнительной переменной-массива для хранения индексов.
- Четвертая строка: определение размера строки.
- Пятая строка: цикл по всем символам строки.
- Шестая строка: проверка символа на принадлежность к комментарию.
- Седьмая строка: если символ является началом комментария, то в переменную is_com записывается тип комментария.
- Восьмая строка: если символ является концом комментария, то выполняется выход из внутреннего цикла с пропуском итераций.
- Девятая строка: если символ является началом второго типа комментария, то выполняется переход к следующему символу с пропуском итераций.
- Десятая строка: если символ является концом второго типа комментария, то выполняется выход из внутреннего цикла с пропуском итераций.
- Одиннадцатая строка: после окончания обработки комментария, в переменную is_com записывается значение 0.
- Двенадцатая строка: печать символа строки.
- Тринадцатая строка: завершающий символ строки.
- Четырнадцатая строка: вызов функции system для приостановки работы программы до нажатия клавиши.
- Пятнадцатая строка: завершение работы программы.
- Шестнадцатая строка: возврат значения 0.
- Ввод строки с помощью функции scanf, вызов функции system и завершение работы программы не обрабатываются в данном коде.
- Данный код не обрабатывает ситуацию, когда в массиве-строке присутствует несколько комментариев подряд.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д