Ir ao conteúdo
  • Cadastre-se

88games16

Membro Pleno
  • Posts

    31
  • Cadastrado em

  • Última visita

Reputação

15
  1. @Flávio Pedroza Funcionou obrigado, porém porque usou na função Busca ponteiro para ponteiro para struct No ?
  2. verdade erro bobo porém mesmo assim ainda da erro se eu não chamar a função busca no main chamar apenas a função insere e enumera o programa roda
  3. criei uma função para inserir palavras em uma lista encadeada porém se essa palavra já estiver presente na lista aumenta o contador indicando quantas vezes essa palavra aparece o código faz bem a parte de inserir e enumerar a lista porém a busca não faz alguém poderia me ajudar resolver esse problema #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct No { char chave[20]; int num; struct No * Prox; } No; No * L = NULL; void Enumere (No * L) { //Vai imprimir a lista. No * p = NULL; p = L; while (p != NULL){ printf("%s\t repeticoes: %d\n", p->chave , p->num); p = p->Prox; } }; void Insere(No** L, char nome[], int x){ No * novo = NULL; novo = (No *) malloc(sizeof(No)); strcpy(novo->chave, nome); novo->num = x; novo->Prox = *L; //insere um novo elemento na 1º posição da lista *L= novo; }; /*void Busca (No* L, char nome[]){ No * p = NULL; p = L; while ((p!=NULL)&& (strcmp(p->chave, nome)!= 0)){ p = p->Prox; } if(p!=NULL){ p->num = p->num+1; } };*/ void Busca (No *L, char nome[]){ No* p; p = L; if(p = NULL){ Insere (&L, nome,1);//lista vazia então insere elemengo }else{ while ((p!= NULL) && (strcmp(p->chave, nome)!= 0)){//varrer lista até fim ou até encontrar o elemento p = p->Prox; } if(p!=NULL){//p!= /null quer dizer que encontrou o elemento antes de chegar ao fim da lista p->num = p->num +1;//aumenta o contador numero de vezes que o elemento aparece }else{ Insere(&L, nome,1);//não encontrou elemento então insere } } }; int main(){ No * L = NULL; char teste[]="cenoura"; char teste2[]="suco"; char teste3[]="computador"; char teste4[]="suco"; Insere(&L,teste,1); Insere(&L,teste2,1); Insere(&L,teste3,1); Busca(&L,teste4); Enumere(L); return 0; }
  4. seria ler as palavras do arquivo e pegar as palavras e jogar em uma lista encadeada as palavras
  5. consegui ler o arquivo porém no final após rodar da falha de segmentação alguém pode ajudar #include <stdio.h> #include<stdlib.h> #include<string.h> int main(){ int i,j,tam,tam_teste; i =0; j=0; char teste[20]; char linha[100]; FILE *arq = fopen("texto","r"); if(arq == NULL) // testa se o arquivo foi aberto com sucesso { printf("\n\nImpossivel abrir o arquivo!\n\n"); return 1; } while(fgets(linha, 100, arq) != NULL){ tam = strlen(linha); printf("%s",linha); i=0; while(i<=tam){ j=0; while (linha[i]!=' '){ teste[j] = linha[i]; // copiando as palavras para um vetor i = i+1; j = j+1; } if (linha[i] == ' '){ teste[j]='\0'; i=i+1; }else if((linha[i]== '\0') || (linha[i] == '\n')){ teste[j]='\0'; } printf("palavra lida %s",teste); printf("\n"); for (j=0;j<20;j++){ teste[j]='\0'; //zerando o vetor para ler a proxima palavra } } } fclose(arq); return 0; }
  6. só botei para ler entrada padrão para testar as modificações que fiz agora do jeito que está só não imprime a ultima palavra mas se tiver um espaço em branco ou qualquer coisa após ela a imprime tudo certo
  7. @arfneto mas o primeiro loop ele vai ler ate '\0' como isso não vai ler a string toda ? e o segundo loop eu tenho que ler cada palavra da string ler ela toda ate o "espaço" que separa cada palavra refiz o código e agora esta imprimindo só tem um problema se a ultima palavra tiver 3 vogais ou + imprime int main(){ // char * str = "caixa jujuba casa bar telefone marinha melao"; char str [80]; char str2 [20]; int i,j,tam,qt,tam2; i=0; j=0; qt =0; for (j=0;j<20;j++){ str2[j]='\0'; } printf("digite a sequencia de strinsca: "); fgets (str,80,stdin); // frase digitada printf("frase %s",str); while (str[i]!='\0'){ j=0; while (str[i]!=' '){ str2[j] = str[i]; // copiando as palavras para um vetor i = i+1; j = j+1; } if (str[i] == ' '){ str2[j]='\0'; i=i+1; } tam = strlen(str2); for (j=0;j<tam;j++){ if ( str2[j] == 'a' || str2[j] == 'e' || str2[j] == 'i' || str2[j] == 'o' || str2[j] == 'u'){ qt = qt+1; } } if (qt >=3){ printf("palavra: %s\n",str2); } qt =0; } return 0; }
  8. #include <stdio.h> #include <string.h> int main(){ char * str = "caixa cafe telefone casa"; char str2 [20]; int i,j,tam,qt; i=0; j=0; qt =0; for (j=0;j<20;j++){ str2[j]='\0'; } j=0; //printf("digite a sequencia de strins: "); //fgets (str,80,stdin); // frase digitada while (str[i]!='\0'){ while (str[i]!=' '){ str2[j] = str[i]; // copiando as palavras para um vetor i = i+1; } while (str[i] == ' '){ i=i+1; } tam = strlen(str2); for (j=0;j<tam;j++){ if ( str2[j] == 'a' || str2[j] == 'e' || str2[j] == 'i' || str2[j] == 'o' || str2[j] == 'u'){ qt = qt+1; } } if (qt >=3){ printf("palavra: %s\n",str2); } for (j=0;j<20;j++){ str2[j]='\0'; } j=0; qt =0; } return 0; } mesmo ja definindo uma frase ainda sim da errado só que não estou conseguindo achar o erro na lógica
  9. @arfneto o str2 tem 20 apenas pois uso esse vetor para ler cada palavra que foi digitada na frase e estou assumindo que cada palavra individualmente não será maior que 20 na forma que escrevi o código é para o vetor str2 ler cada palavra da frase verificar se a palavra tem ao menos 3 vogais e imprimir depois de cada print eu zero ele para ler a segunda palavra da frase porém não esta fazendo isso ele imprime a primeira palavra porém não continua não sei o que esta errado no código na cabeça esta certo
  10. @allanxd entendi porém não pode usar essa função na resolução
  11. @allanxd não conheço essa função minha programação é inicial
  12. @allanxd não pode usar essa função strtok da forma que esta imprime a primeira palavra e depois da erro de segmentação
  13. estou com dificuldade no seguinte problema tenho que ler uma frase e printar todas as palavras que tenham 3 ou + vogais #include <stdio.h> #include <string.h> int main(){ char str[80]; char str2 [20]; int i,j,tam,qt; i=0; j=0; qt =0; for (j=0;j<20;j++){ str2[j]='\0'; } j=0; printf("digite a sequencia de strins: "); fgets (str,80,stdin); // frase digitada while (str[i]!='\0'){ while (str[i]!=' '){ str2[j] = str[i]; // copiando as palavras para um vetor i = i+1; } while (str[i] == ' '){ i=i+1; } tam = strlen(str2); for (j=0;j<tam;j++){ if ( str2[j] == 'a' || str2[j] == 'e' || str2[j] == 'i' || str2[j] == 'o' || str2[j] == 'u'){ qt = qt+1; } } if (qt >=3){ printf("palavra %s\n",str2); } for (j=0;j<20;j++){ str2[j]='\0'; } j=0; qt =0; } return 0; }

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...