• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

suzy

tres caracteres consecutivos

5 mensagens neste tópico

:)viva! malta! mais uma vez aqui venho com as minhas duvidas, agora num exercicio que parece simples mas tou com duvida -

o problema é:

9. Desenvolva uma função que verifique se existem 3 caracteres consecutivos iguais numa

frase. A função recebe como argumento um ponteiro para o início da frase (deve assumir que

no final existe um ‘\0’). Deve devolver 1 se existirem 3 caracteres consecutivos iguais, ou 0

no caso contrário. A sua declaração é a seguinte:

int tres_consecutivos(char *frase);

eu fiz assim:


#include <stdio.h>
#include <string.h>

int tres_consecutivos(char *frase){
          int i, dim;
          dim=strlen(frase)-2;
          printf(" %d\n",dim);
          for(i=0;i<dim && frase[i]!=' ';i++){
                              
                     if(frase[i]==frase[i+1] && frase[i+1] == frase[i+2]){
                              return 1;
                     }else{
                              return 0;
                              
                          }
                          
                }
                
                
      }
      main()
      {
      char nome[20];
      int resultado;
      printf(" introduza a frase\n");
      gets(nome);
      resultado=tres_consecutivos(nome);
      printf(" vai retornar o valor %d\n",resultado);
      fflush(stdin);
      getchar();
      }
     

acontece se eu colocar

aaa ruem flfo -> da me correcto, a funcao retorna o valor 1

se eu fizer

ola aaana-> ja nao dá, e a funcao retorna o valor 0,

:P alguem sabe porque??

:)obrigada

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Qual é o objectivo de ter:  frase[i]!=' '  na condição? Assim vai parar quando encontrar um espaço.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Qual é o objectivo de ter:  frase[i]!=' '  na condição? Assim vai parar quando encontrar um espaço.

Também não percebi.

Quanto ao teu problema (além do que o shumy disse), não podes fazer return 0; no else, só podes retornar 0 quando chegas ao fim da string.

Porquê? Porque na 1ª iteração comparas os 3 1ºs caracteres; se não forem iguais a função retorna 0 em vez de passar à iteração seguinte.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

também estava com o mesmo problema. Basta tirares o return 0 do else e meteres no fim da função como disse o TheDark e funciona. Nao sei porque no dim metes strlen()-2. Eu faço sem o -2 e funciona.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

também estava com o mesmo problema. Basta tirares o return 0 do else e meteres no fim da função como disse o TheDark e funciona. Nao sei porque no dim metes strlen()-2. Eu faço sem o -2 e funciona.

este tópico deverá ter sido criado antes de eu ter chegado aqui :

int tres_consecutivos(char *frase) {
 int pos, count;

 for (pos = 0, conut = 0; frase[pos] != '\0' && count < 3; pos++) {
   count = (pos == 0 || frase[pos] == frase[pos-1]) ? count + 1 : 0;
 }

 return count == 3;
}

Editado por HappyHippyHippo
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora