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

Объяснение кода листинга программы

  1. В функции correctBraces происходит поиск и подсчет скобок в строке.
  2. В функции deleteCorrectBraces происходит удаление скобок из строки.
  3. Исходная строка в функции main - You're basic,(but hard (to (define Simple) yet somehow sublime) Knew) you (would )strike again.
  4. В функции correctBraces используется цикл for для прохода по каждому символу строки.
  5. Переменная flag используется для отслеживания наличия открывающей скобки.
  6. Переменная count используется для отслеживания количества открытых скобок.
  7. Если символ является открывающей скобкой и flag равно 0, то увеличивается счетчик count и flag устанавливается в 1.
  8. Если символ является закрывающей скобкой и count больше 0, то уменьшается счетчик count.
  9. Если символ является открывающей скобкой и count больше 0, то увеличивается счетчик count.
  10. Если flag равно 0 и все скобки были закрыты, то выводится сообщение Braces not found. и программа завершается с кодом ошибки 1.
  11. Если count больше 0, то возвращается 0.
  12. Если count равно 0, то возвращается 1.
  13. В функции deleteCorrectBraces используется цикл for для прохода по каждому символу строки.
  14. Переменная first используется для хранения указателя на первый символ скобки.
  15. Переменная last используется для хранения указателя на последний символ скобки.
  16. Переменная ptr используется для временного хранения указателя на текущий символ.
  17. Если символ является открывающей скобкой, то увеличивается счетчик count.
  18. Если count равно 0 и flag равно 1, то происходит удаление скобок.
  19. Если count больше 0, то выполняется поиск закрывающей скобки.
  20. Если flag равно 1 и count равно 0, то выполняется удаление скобок.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.692 из 5
Похожие ответы