Удаление комментариев - 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;
}

Объяснение кода листинга программы

  1. Удаление комментариев из строки, введенной пользователем.
  2. Используется два массива: массив-строка и массив-дополнительная переменная для хранения индексов.
  3. Первая строка: инициализация массива-строки пустой строкой.
  4. Вторая строка: считывание строки с помощью функции scanf.
  5. Третья строка: инициализация дополнительной переменной-массива для хранения индексов.
  6. Четвертая строка: определение размера строки.
  7. Пятая строка: цикл по всем символам строки.
  8. Шестая строка: проверка символа на принадлежность к комментарию.
  9. Седьмая строка: если символ является началом комментария, то в переменную is_com записывается тип комментария.
  10. Восьмая строка: если символ является концом комментария, то выполняется выход из внутреннего цикла с пропуском итераций.
  11. Девятая строка: если символ является началом второго типа комментария, то выполняется переход к следующему символу с пропуском итераций.
  12. Десятая строка: если символ является концом второго типа комментария, то выполняется выход из внутреннего цикла с пропуском итераций.
  13. Одиннадцатая строка: после окончания обработки комментария, в переменную is_com записывается значение 0.
  14. Двенадцатая строка: печать символа строки.
  15. Тринадцатая строка: завершающий символ строки.
  16. Четырнадцатая строка: вызов функции system для приостановки работы программы до нажатия клавиши.
  17. Пятнадцатая строка: завершение работы программы.
  18. Шестнадцатая строка: возврат значения 0.
  19. Ввод строки с помощью функции scanf, вызов функции system и завершение работы программы не обрабатываются в данном коде.
  20. Данный код не обрабатывает ситуацию, когда в массиве-строке присутствует несколько комментариев подряд.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4 из 5
Похожие ответы