Исключить символы между круглых скобок, включая сами скобки - C (СИ)
Формулировка задачи:
Помогите, пожалуйста, с задачей.
Задание звучит следующим образом: "Исключить все символы между круглых скобок, включая сами скобки. Рассмотреть случай вложенных скобок."
Решение задачи: «Исключить символы между круглых скобок, включая сами скобки»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> int correctBraces (char* ); void deleteCorrectBraces(char* ); int main() { char str[] = "You're basic,(but hard (to (define Simple) yet somehow sublime) Knew) you (would )strike again."; if(correctBraces(str)){ deleteCorrectBraces(str); puts(str); } else puts("Incorrect Braces!"); return 0; } int correctBraces (char* p) { int count = 0, flag = 0; for( ; *p; p++){ if(!flag){ if(*p == '('){ count++; flag = 1; } } else{ if(*p == ')') count--; if(*p == '(') count++; } } if(!flag){ puts("Braces not found."); exit(1); } if(count) return 0; else return 1; } void deleteCorrectBraces(char* p) { char *first, *last, *ptr; int count = 0, flag = 0; for( ; *p; p++){ if(*p == '('){ count++; if(!flag){ first = ptr = p; flag = 1; while(count && *ptr){ if(*ptr++ == ')') count--; if(*ptr == '(') count++; if(flag && !count){ last = ptr; while(*first) *first++ = *last++; flag = 0; } } } } } }
Объяснение кода листинга программы
- В функции correctBraces происходит поиск и подсчет скобок в строке.
- В функции deleteCorrectBraces происходит удаление скобок из строки.
- Исходная строка в функции main -
You're basic,(but hard (to (define Simple) yet somehow sublime) Knew) you (would )strike again.
- В функции correctBraces используется цикл for для прохода по каждому символу строки.
- Переменная flag используется для отслеживания наличия открывающей скобки.
- Переменная count используется для отслеживания количества открытых скобок.
- Если символ является открывающей скобкой и flag равно 0, то увеличивается счетчик count и flag устанавливается в 1.
- Если символ является закрывающей скобкой и count больше 0, то уменьшается счетчик count.
- Если символ является открывающей скобкой и count больше 0, то увеличивается счетчик count.
- Если flag равно 0 и все скобки были закрыты, то выводится сообщение
Braces not found.
и программа завершается с кодом ошибки 1. - Если count больше 0, то возвращается 0.
- Если count равно 0, то возвращается 1.
- В функции deleteCorrectBraces используется цикл for для прохода по каждому символу строки.
- Переменная first используется для хранения указателя на первый символ скобки.
- Переменная last используется для хранения указателя на последний символ скобки.
- Переменная ptr используется для временного хранения указателя на текущий символ.
- Если символ является открывающей скобкой, то увеличивается счетчик count.
- Если count равно 0 и flag равно 1, то происходит удаление скобок.
- Если count больше 0, то выполняется поиск закрывающей скобки.
- Если flag равно 1 и count равно 0, то выполняется удаление скобок.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д