Динамические структуры: проверить баланс круглых скобок в тексте - 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;
}
Объяснение кода листинга программы
Этот код использует стек для проверки баланса скобок в тексте. Вот список ключевых шагов:
- Включаются необходимые заголовочные файлы.
- Определяется структура стека.
- Реализуется функция push для добавления элемента в стек.
- Реализуется функция pop для удаления элемента из стека.
- В функции main создается пустой стек и считывается текст.
- Происходит итерация по каждому символу в тексте.
- Если текущий символ является открывающей скобкой, то его индекс добавляется в стек.
- Если текущий символ является закрывающей скобкой, то из стека удаляется последний добавленный индекс закрывающей скобки и выводится сообщение, если скобки не совпадают.
- Если стек не пуст после обработки всех символов, то выводится сообщение об ошибке.