Проверить правильность расстановки круглых и квадратных скобок в выражениях - C (СИ)
Формулировка задачи:
дана строка символов проверить правильность расстановки круглых и квадратных скобок в выражениях
Решение задачи: «Проверить правильность расстановки круглых и квадратных скобок в выражениях»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#define ROUND_OPEN '('
#define ROUND_CLOSE ')'
#define SQUARE_OPEN '['
#define SQUARE_CLOSE ']'
#define STR_LEN 256
#define STR_MASK "%255[^\n]%*c"
int test_brackets(const char * s) {
static char stack[STR_LEN];
int pos = -1;
while ( *s ) {
switch ( *s ) {
case ROUND_OPEN :
case SQUARE_OPEN :
if ( pos >= STR_LEN - 1 )
return 1;
stack[++pos] = *s;
break;
case ROUND_CLOSE :
if ( pos < 0 || stack[pos--] != ROUND_OPEN )
return 1;
break;
case SQUARE_CLOSE :
if ( pos < 0 || stack[pos--] != SQUARE_OPEN )
return 1;
break;
}
++s;
}
return ( pos != -1 );
}
int main(void) {
char str[STR_LEN];
while ( printf("String: ") && scanf(STR_MASK, str) == 1 )
printf("%sorrect.\n", ( test_brackets(str) ) ? "Not c" : "C");
return 0;
}
Объяснение кода листинга программы
- В этом коде используется стандартная библиотека языка C, что позволяет использовать функции для работы со строками и памятью.
- Код проверяет правильность расстановки скобок в строке. Он использует стек для отслеживания открытых скобок и проверки закрывающих скобок.
- Если в строке недостаточно места в стеке или если закрывающая скобка не соответствует открывающей, функция возвращает 1, указывая на ошибку.
- В функции main() код запрашивает строку у пользователя с помощью функции scanf() и отображает результат проверки функции test_brackets().
- Код продолжает запрашивать строки у пользователя и проверять их до тех пор, пока пользователь не введет строку, содержащую ошибку в расстановке скобок.
- В конце программы функция main() возвращает 0, указывая на успешное завершение.