Проверить в файле баланс скобок всех видов - C (СИ)
Формулировка задачи:
посмотрите плз в чем ошибка
#include <stdio.h> using namespace std; char s[500], str[500]; int r; bool bad; int main() { gets(str); for (int i = 0; str[i] != 0; i++) { if (str[i] == '(' || str[i] == '[' || str[i] == '{') s[r++] = str[i]; else if (str[i] == ')' || str[i] == ']' || str[i] == '}') { if (r == 0 || (str[i] == ')' && s[r - 1] != '(') || (str[i] == ']' && s[r - 1] != '[') || (str[i] == ']' && s[r - 1] != '[')) { bad = true; break; } r--; } else if (r > 0) { bad = true; break; } } if (r > 0) bad = true; printf("%d", bad); }
Решение задачи: «Проверить в файле баланс скобок всех видов»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #define buf 5000 int exchange(char bracket) { switch (bracket) { case '(' : return 1; case '[' : return 2; case '{' : return 3; case ')' : return -1; case ']' : return -2; case '}' : return -3; default : return 0; } } int main() { FILE *f = fopen("data.txt","r"); if (f==NULL) { perror ("Error opening file"); getchar(); exit(1); } int *s = new int[buf]; char c; int cEx, i = 0, found = 0; do { c = getc (f); cEx = exchange(c); if(cEx>0) { s[i] = cEx; i++; } else if(cEx<0) { if(i>0 && (s[i-1]+cEx)==0) i--; else { found = 1; break; } } } while (c!= EOF); if(!i && !found) printf("Balance perfect"); else printf("No balance in this file"); getchar(); return 0; }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Определяется буферная переменная buf для хранения количества символов в файле
- Создается функция exchange для проверки вида скобки и возврата ее числа
- Создается функция main для чтения файла и проверки его на баланс скобок
- Открывается файл
data.txt
для чтения - Создается массив s для хранения чисел скобок
- Устанавливаются начальные значения переменных cEx, i и found
- Запускается цикл do-while для чтения символов из файла
- В каждой итерации цикла, считывается очередной символ из файла
- Функция exchange вызывается для определения типа скобки
- Если символ является скобкой, его число записывается в массив s
- Если символ является закрывающей скобкой, проверяется, есть ли соответствующая открывающая скобка в массиве s
- Если баланс скобок не соблюден, переменная found устанавливается в 1 и цикл прерывается
- После окончания цикла, проверяется, были ли найдены скобки в файле
- Если скобки не найдены и баланс скобок соблюден, выводится сообщение
Balance perfect
- В противном случае выводится сообщение
No balance in this file
- Программа ожидает нажатия любой клавиши для завершения работы
- В конце работы программы возвращается 0, что означает успешное завершение работы программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д