Исключить символы между круглых скобок, включая сами скобки - 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, то выполняется удаление скобок.