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

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

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

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

textual
#include <stdio.h>
 
size_t bracket_pos( const char *, char );
 
int main()
{
    size_t position = bracket_pos( "Hey, ( in brackets ) ( ... ((((", '(' );
    printf( "%d", (long)position );
}
 
size_t bracket_pos_( const char* str, char bt_o, char bt_c )
{
    size_t pos = 0;  /* current symbol of str */
    size_t last_opened_pos;
    size_t opened = 0, closed = 0;
    /* ---- ---- */
 
    do
    {
        if ( *str == bt_c ) closed += 1;
        if ( *str == bt_o )
        {
            if ( opened == closed ) last_opened_pos = pos;
           
            opened += 1;
        }
 
        if ( closed > opened ) return pos;
 
        pos += 1;
    }
    while ( *++str );
 
    if ( opened == closed ) return (size_t)-2;  /* ???? */
   
    return last_opened_pos;
}
 
size_t bracket_pos( const char* str, char bracket )
{
    if ( !str )  return (size_t)-1;
    if ( !*str ) return (size_t)-1;
    /* ---- ---- */
 
    char bracket_opened, bracket_closed;
 
    switch ( bracket )
    {
    case '(':
    case ')': bracket_opened = '('; bracket_closed = ')'; break;
 
    case '<':
    case '>': bracket_opened = '<'; bracket_closed = '>'; break;
 
    case '[':
    case ']': bracket_opened = '['; bracket_closed = ']'; break;
 
    case '{':
    case '}': bracket_opened = '{'; bracket_closed = '}'; break;
   
    default: return (size_t)-1;
    }
 
    return bracket_pos_( str, bracket_opened, bracket_closed );
}

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


СОХРАНИТЬ ССЫЛКУ