Ir ao conteúdo

Palindromo usando pilha


renan.longlong

Posts recomendados

Postado

Galera o que ta ocorrendo, não estou conseguindo carregar o caracter na pilha eu consigo e ja fiz alguns programas com inteiros
com strings também porém com caracter de uma string não consigo passar
EX: SANTOS  eu tenho que passar somente o S depois o A,N,T,O,S pra depois eu desempilhar e ter o inverso porém
não estau conseguindo transportas.
 
La no código eu vou comenta a parte que esta dando trabalho 
 
 [noparse][code][/code][/noparse]

#include <stdio.h>#include <stdlib.h>#include <time.h>#include <string.h> // Definicao da estrutura da pilhastruct pilha{char dados[200];struct pilha *prox;}; // Prototipo das funcoeschar empilha(struct pilha **p); struct pilha *desempilha(struct pilha **p); int main(){ // Topo da pilhastruct pilha *p = NULL; // Ponteiro para armazenar um elemento desempilhadostruct pilha *desempilhado = NULL; // Variaveis auxiliaresint i, n; // Semeia o gerador de numeros aleatoriossrand(time(NULL)); printf("Empilhando...\n");char inteiro1[200];char auxint[200];int a2=0;int z=0;      empilha(&p);// Desempilha e imprime todos os valores da pilhawhile ((desempilhado = desempilha(&p)) != NULL){printf("Desempilhado: %s\n", desempilhado->dados); } } /* * Funcao responsavel por empilhar um valor na pilha.  * e o valor a ser empilhado. */ char empilha(struct pilha **p){ char inteiro1[200];char auxint[200];int a2=0;int z=0;int i=0;// Ponteiro para o novo elemento a ser alocadostruct pilha *novo = NULL; // Aloca o novo elementonovo = (struct pilha *) malloc(sizeof(struct pilha)); // Verifica se a alocacao teve exitoif (novo != NULL){    printf("\nInsira um valor carai\n");   gets(inteiro1);      fflush(stdin);   a2=strlen(inteiro1);      for(i=0; i<a2; i++)   {   //strcpy(aux->nome,n);     //strcpy(auxint[i],inteiro1[i]);    auxint=inteiro1[i];  //strcpy(novo->dados,auxint); strcpy(novo->dados,inteiro1); //novo->dados = inteiro1; printf("Empilhado: %c\n", inteiro1[i]);fflush(stdin); } //galera essa parte de cima nao consigo colocar so o caracter da palavra que digitei para entrar na pilha//so consigo se eu joga a string inteiro se observar tentei varios modos não sei se é falta de lógica minha mesmo ou comando errado //mesmo // Insere o valor no novo elemento//strcpy(aux->nome,n);// strcpy(novo->dados,inteiro1); // Verifica se a pilha esta vazia, se estiver vazia, o ponteiro// para o proximo elemento sera NULLif (*p == NULL){novo->prox = NULL;} else { // Caso contrario, o novo elemento assume o topo, e o proximo// elemento para a ser o antigo toponovo->prox = *p;} // O topo passa a ser o novo elemento*p = novo; } else {printf("Erro ao alocar memoria!\n");return 1;} return 0; } /* * Funcao responsavel por desempilhar um valor da pilha. Recebe como parametro * um ponteiro para um ponteiro para o primeiro elemento da pilha */struct pilha *desempilha(struct pilha **p){ // Variavel que armazenara o valor desempilhado temporariamentestruct pilha tmp; // Ponteiro auxiliarstruct pilha *aux = NULL; // Ponteiro para o elemento que sera desempilhadostruct pilha *del = NULL; // Se a pilha nao estiver vazia...if (*p != NULL){ // Aloca o elemento que recebera o valor a ser desempilhadoaux = (struct pilha *) malloc(sizeof(struct pilha)); // Obtem o valor do elemento desempilhadotmp = **p; // Armazena um ponteiro para o valor do elemento desempilhadoaux = &tmp; // Armazena o endereco do elemento a ser excluidodel = *p; // Altera o topo para o proximo elemento da pilha*p = (*p)->prox; // Exclui o elemento desempilhadofree(del); // Retorna o ponteiro para o valor desempilhadoreturn aux; } else {return NULL;}}
Postado

oi,eu nao consegui entender direito o que voce ta querendo fazer(eu li 7 vezes!),strcpy nao vai funcionar pra copiar nesse caso ja que ele vai copiar a string "inteiro1" toda,mas se voce quer que só o primeiro caractere seja pego mesmo que seja digitado mais coisas na stream,pode usar a função getchar

 

se nao for isso que perguntou,pergunta de novo que na próxima eu vou entender

Postado

oi,eu nao consegui entender direito o que voce ta querendo fazer(eu li 7 vezes!),strcpy nao vai funcionar pra copiar nesse caso ja que ele vai copiar a string "inteiro1" toda,mas se voce quer que só o primeiro caractere seja pego mesmo que seja digitado mais coisas na stream,pode usar a função getchar

 

se nao for isso que perguntou,pergunta de novo que na próxima eu vou entender

ola atlos acho que ficou meio complicado mesmo  rsrs...esses 7 vezes e que na verdade so um funciona o resto esta como comentário.. esse  strcpy eu uso para jogar valor de string na estrutura da pilha por ser uma string ele so copia

se usa strcpy caso contrario não nao joga na pilha ex: com string  strcpy(novo->dados,inteiro1) <<< dessa forma ele ta copiando a palavra inteira porém o que eu quero que copie apenas caracter por caracter no for no caso deveria ser assim  strcpy(novo->dados,inteiro1) esse i refere-se a posicao do vetor do caracter que eu quero .

 

Se não fosse string eu poderia simplesmente usar novo->dados = nomedavariavel; pronto ja estaria na pilha mas no meu caso e uma string ...e eu nao estou conseguindo passar caracter por caracter de uma string completa.....

 

 

Desde já agradeço a atenção pelo post

Postado

mas porque nao faz "novo->dados = inteiro1" então?eu nao to com um compilador aqui,mas acho que nao teria problema,a estrutura ja taria inicializada e "dados" é um array de char tambem,isso estaria copiando caractere por caractere,se nao for isso então não to entendendo com certeza

Postado

mas porque nao faz "novo->dados = inteiro1" então?eu nao to com um compilador aqui,mas acho que nao teria problema,a estrutura ja taria inicializada e "dados" é um array de char tambem,isso estaria copiando caractere por caractere,se nao for isso então não to entendendo com certeza

E isso mesmo não tinha pensado nisso dados jae um vetor de caracter, fiz um breve teste empilho só que agora preciso mudar a forma de desempilha

vou testar a noite pois no momento ta um corre da ***** valeu atlos

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!