Динамические структуры: проверить баланс круглых скобок в тексте - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброе время суток.Помогите пожалуйста с след. заданием. Условие: Дан текст.Проверить баланс круглых скобок в нем,если скобки сбалансированы-выводить их координаты попарно,иначе-выводить сообщение об ошибке.Использовать дин. структуры. Мои наработки,
#include<conio.h>
#include<stdio.h>
#include<string.h>
 
struct stack
 {int info;
 struct stack *next;
 };
void push (struct stack **s,int item)
 {struct stack *new_n;
 new_n=(struct stack *)malloc(sizeof(struct stack));
 new_n->info=item;
 new_n->next=info *s;
 *s=new_n;
}
int pop(struct stack **s,int *error)
{
 struct stack * old=*s;
 int info=0;
 if(*s)
  {info=old->info;
  *s=(*s)->next;
  *error=0;
  }
 else *error=1;
 return (info);
}
int main()
{
 int error,i,k;
 struct stack *s;
 char text[100];
 gets(text);
 for(i=0;i<strlen(text);i++)
  {
   if(text[i]=='(') push(&s,i);
   else
    {if (text[i]==')')
     {if ((k=pop(&s,&error))&&(error==0))
      printf("%d%d",k,i);
     else {printf("error");break;}
     }
    }
   }
  if (s!=NULL) printf("error");
  getch();
  return 0;
  }
,которые,к сожалению,не работают-(

Решение задачи: «Динамические структуры: проверить баланс круглых скобок в тексте»

textual
Листинг программы
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
 
struct stack {
    int info;
    struct stack *next;
};
 
void push (struct stack **s,int item) {
    struct stack *new_n;
    new_n=(struct stack *)malloc(sizeof(struct stack));
    new_n->info=item;
    new_n->next=*s;
    *s=new_n;
}
 
int pop(struct stack **s,int *error) {
     struct stack * old=*s;
     int info=0;
     if(*s) {
         info=old->info;
         *s=(*s)->next;
        *error=0;
     } else {
         *error=1;
         return -1;
     }
     free(old);
     return (info);
}
 
int main() {
    int error,i,k;
    struct stack *s = NULL;
    char text[100];
    gets(text);
    for(i=0;i<strlen(text);i++)
    {
        if(text[i]=='(') push(&s,i);
        else {
            if (text[i]==')') {
                k=pop(&s,&error);
                if (error==0) printf("(%d %d) ",k,i);
                else {
                    printf("error");
                    break;
                }
            }
        }
    }
    if (s!=NULL) {
        printf("error");
        while (!error) pop(&s, &error);
    }
    getch();
    return 0;
}

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

Этот код использует стек для проверки баланса скобок в тексте. Вот список ключевых шагов:

  1. Включаются необходимые заголовочные файлы.
  2. Определяется структура стека.
  3. Реализуется функция push для добавления элемента в стек.
  4. Реализуется функция pop для удаления элемента из стека.
  5. В функции main создается пустой стек и считывается текст.
  6. Происходит итерация по каждому символу в тексте.
  7. Если текущий символ является открывающей скобкой, то его индекс добавляется в стек.
  8. Если текущий символ является закрывающей скобкой, то из стека удаляется последний добавленный индекс закрывающей скобки и выводится сообщение, если скобки не совпадают.
  9. Если стек не пуст после обработки всех символов, то выводится сообщение об ошибке.

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

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

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