Escreva uma função em C para determinar se uma string de caracteres de entrada é da forma: xCy, onde x é uma string consistindo nas letras 'A' e 'B', e y é o inverso de x (isto é, se x = "ABABBA", y deve equivaler a "ABBABA"). Em cada ponto, você só poderá ler o próximo caractere da string. Dica: Use pilha. O professor disse que está quase no jeito o código abaixo, mas preciso de ajuda:
#include
#include
typedef struct cel {
char conteudo;
struct cel *prox;
} celula;
void empilha(char c, celula *topo) {
celula *nova;
nova = malloc( sizeof (celula));
nova->conteudo = c;
nova->prox = topo->prox;
topo->prox = nova;
}
char desempilha(celula *topo) {
char c;
celula *pt;
pt = topo->prox;
c = pt->conteudo;
topo->prox = pt->prox;
free(pt);
return c;
}
int verifica(char *str, celula *topo) {
for (i=0; str != 'C'; i++)
empilha(str, topo);
for (i=0; str != '\0'; i++)
if (desempilha(topo) != str)
return 1;
return (topo->prox == NULL);
}
int main() {
char str[255];
int i;
celula cabeca;
celula *topo;
topo = &cabeca;
topo->prox = NULL;
printf("Informe a string: ");
gets(str);
if (verifica(str, topo) == 0)
printf("%s é da forma xCy\n", str);
else
printf("%s não é da forma xCy\n", str);
return 0;
}