Проверить текст на соответствие числа открывающихся и закрывающихся скобок - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Дан текстовый файл, содержащий программу на языке Си. Проверить эту программу на соответствие числа открывающихся и закрывающихся скобок (круглых, квадратных, фигурных и угловых). Как можно прочитать файл, чтобы была возможность проверять является ли текущий символ скобкой или нет? Пишу через построчное чтение, но не уверен, что пишу правильно и подходит ли этот способ вообще, помогите
Листинг программы
  1. p=fgets(s,80,f);
  2. if(p==NULL)
  3. printf("Файл закончился");
  4. else
  5. printf("Прочитана строка:\n%s",s);

Решение задачи: «Проверить текст на соответствие числа открывающихся и закрывающихся скобок»

textual
Листинг программы
  1. #include <stdio.h>
  2.  
  3. size_t bracket_pos( const char *, char );
  4.  
  5. int main()
  6. {
  7.     size_t position = bracket_pos( "Hey, ( in brackets ) ( ... ((((", '(' );
  8.     printf( "%d", (long)position );
  9. }
  10.  
  11. size_t bracket_pos_( const char* str, char bt_o, char bt_c )
  12. {
  13.     size_t pos = 0;  /* current symbol of str */
  14.     size_t last_opened_pos;
  15.     size_t opened = 0, closed = 0;
  16.     /* ---- ---- */
  17.  
  18.     do
  19.     {
  20.         if ( *str == bt_c ) closed += 1;
  21.         if ( *str == bt_o )
  22.         {
  23.             if ( opened == closed ) last_opened_pos = pos;
  24.            
  25.             opened += 1;
  26.         }
  27.  
  28.         if ( closed > opened ) return pos;
  29.  
  30.         pos += 1;
  31.     }
  32.     while ( *++str );
  33.  
  34.     if ( opened == closed ) return (size_t)-2;  /* ???? */
  35.    
  36.     return last_opened_pos;
  37. }
  38.  
  39. size_t bracket_pos( const char* str, char bracket )
  40. {
  41.     if ( !str )  return (size_t)-1;
  42.     if ( !*str ) return (size_t)-1;
  43.     /* ---- ---- */
  44.  
  45.     char bracket_opened, bracket_closed;
  46.  
  47.     switch ( bracket )
  48.     {
  49.     case '(':
  50.     case ')': bracket_opened = '('; bracket_closed = ')'; break;
  51.  
  52.     case '<':
  53.     case '>': bracket_opened = '<'; bracket_closed = '>'; break;
  54.  
  55.     case '[':
  56.     case ']': bracket_opened = '['; bracket_closed = ']'; break;
  57.  
  58.     case '{':
  59.     case '}': bracket_opened = '{'; bracket_closed = '}'; break;
  60.    
  61.     default: return (size_t)-1;
  62.     }
  63.  
  64.     return bracket_pos_( str, bracket_opened, bracket_closed );
  65. }

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

  1. В функции bracket_pos проверяется, является ли входной строка пустой. Если это так, функция возвращает -1.
  2. В функции bracket_pos создаются две переменные bracket_opened и bracket_closed, которые будут использоваться для отслеживания открытых и закрытых скобок соответственно.
  3. В функции bracket_pos используется оператор switch для определения типа скобки, которую нужно отследить.
  4. В функции bracket_pos вызывается функция bracket_pos_, передавая ей входную строку, открывающую скобку и закрывающую скобку.
  5. В функции bracket_pos_ инициализируются переменные pos, last_opened_pos, opened и closed со значениями 0.
  6. В функции bracket_pos_ используется цикл do, чтобы пройти через каждый символ входной строки.
  7. В функции bracket_pos_ проверяется, является ли текущий символ закрывающей скобкой. Если это так, увеличивается значение closed.
  8. В функции bracket_pos_ проверяется, является ли текущий символ открывающей скобкой. Если это так, увеличивается значение opened, и если opened равно closed, то обновляется значение last_opened_pos.
  9. В функции bracket_pos_ используется оператор if, чтобы проверить, превышает ли количество закрывающих скобок количество открывающих скобок. Если это так, функция возвращает позицию открывающей скобки.
  10. В функции bracket_pos_ используется оператор if, чтобы проверить, равны ли количество открывающих и закрывающих скобок. Если это так, функция возвращает -2.
  11. В функции bracket_pos_ возвращается значение last_opened_pos, если количество открывающих и закрывающих скобок равно.
  12. В функции main вызывается функция bracket_pos, передавая ей строку Hey, ( in brackets ) ( ... (((( и символ ')'.
  13. В функции main выводится значение position.
  14. Значение position представляет собой позицию закрывающей скобки в строке.

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


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

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

14   голосов , оценка 4.071 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы