Ir para conteúdo
Fórum Script Brasil

Danicontieri

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Tudo que Danicontieri postou

  1. Olá pessoal. Sou nova em programação e estou tentando fazer o seguinte programa utilizando lista duplamente encadeada: O usuário entrará com uma string de tamanho até N = 1023 e uma substring que poderá ter até o mesmo tamanho. E no final terei que remover a substring da minha string principal todas as vezes que a mesma aparecer e imprimir a mesma com as remoções e o número de remoções. Exemplo de Entrada: String :AGAGACTGACAAAGTCTGATAGAAGAGTGAC Substring: AGA Exemplo de Saída: GACTGACAAAGTCTGATGTGAC 3 ---------------------------------------------------------------------------------------------------------------- Porém o meu programa não remove a última ocorrência da Substring e não consigo entender o porquê. Para a entrada do exemplo o resultado é: GACTGACAAAGTCTGATAGAGTGAC Isso sempre ocorre quando preciso remover mais de duas vezes. Agradeço desde já caso alguém possa me ajudar aqui vai o código: #include <stdio.h> #include <stdlib.h> #include <string.h> #define N 1023 typedef struct dna dna; typedef struct gerencia gerencia; void imprimefila(gerencia *fila); void inicializa(gerencia *fila); int verifica( gerencia *fila); void inserenafila(gerencia *fila, char cadeiabases); void procura (gerencia *fila,char bases[],int tamanhobase); void remover(gerencia *fila,dna *guardaprimeiro,dna *guardaultimo); struct dna{ char caractere; dna *proximo; dna *anterior; }; struct gerencia{ dna *primeiro; dna *ultimo; int tamanho; int quantidaderemocao; }; void inicializa(gerencia *fila) { fila->primeiro = NULL; fila->ultimo = NULL; fila->tamanho = 0; fila->quantidaderemocao =0; } int verifica( gerencia *fila) { if(fila->primeiro == NULL) return 1; else return 0; } void inserenafila(gerencia *fila, char cadeiabases) { dna *novocarac; novocarac = (dna *) malloc(sizeof(dna)); novocarac->caractere = cadeiabases; if(verifica(fila)) { fila->primeiro = novocarac; fila->ultimo = fila->primeiro; novocarac->proximo =NULL; novocarac->anterior =NULL; fila->tamanho++; } else { novocarac->anterior = fila->ultimo; fila->ultimo->proximo =novocarac; fila->ultimo =novocarac; novocarac->proximo = NULL; fila->tamanho++; } } void imprimefila(gerencia *fila) { dna *aux; aux = fila->primeiro; while(aux!= NULL) { printf("%c",aux->caractere); aux=aux->proximo; } printf("\n%d",fila->quantidaderemocao); } void procura (gerencia *fila,char bases[],int tamanhobase) { int i=0,d=0; dna *aux, *guardaprimeiro,*guardaultimo; aux= fila->primeiro; while(aux!= NULL) { d=0; i=0; if(aux->caractere==bases) guardaprimeiro=aux; while(aux->caractere==bases&&aux!=NULL) { guardaultimo = aux; aux=aux->proximo; i++; d++; if(d==tamanhobase) remover(fila,guardaprimeiro,guardaultimo); } aux=aux->proximo; } imprimefila(fila); } void remover(gerencia *fila,dna *guardaprimeiro,dna *guardaultimo) { dna *aux; aux=fila->primeiro; fila->quantidaderemocao++; if(guardaprimeiro == fila->primeiro) { fila->primeiro=guardaultimo->proximo; fila->primeiro->anterior =NULL; fila->quantidaderemocao++; } else { while(aux!=NULL) { if(aux==guardaprimeiro) { aux = aux->anterior; aux->proximo= guardaultimo->proximo; } aux=aux->proximo; } } } int main() { gerencia fila; char cadeiabases[N] , bases[N]; int tamanhocadeia, tamanhobase,i; scanf("%s %s",cadeiabases,bases); tamanhocadeia= strlen(cadeiabases); tamanhobase =strlen(bases); inicializa(&fila); for(i=0;i<tamanhocadeia;i++) inserenafila(&fila,cadeiabases); if(tamanhocadeia<tamanhobase) imprimefila(&fila); else { procura(&fila,bases,tamanhobase); } return 0; }
×
×
  • Criar Novo...