Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

NERV

Maior numero de ocorrências numa string!

Mensagens Recomendadas

NERV

Boas a todos, pois bem, comecei agora com C arranjei uma lista de exercicios para praticar, entretanto um desses exercicios pode-me o seguinte:

-Defina uma função int iguaisConsecutivos (char s[]) que, dada uma string s calcula o comprimento da maior sub-string com caracteres iguais. Por exemplo, iguaisConsecutivos ("aabcccaac") deve dar como resultado 3, correspondendo á repetiçao "ccc".

O que eu fiz foi:

int iguaisConsecutivos (char s[]){
    int contOcorrencias;
    int i;
    int j;
    int x;
    contOcorrencias=0;
    x=0;

    for(i=0; s[i]!='\0'; i++){
         for(j=0; s[j]!='\0'; j++){
              if (s[i]==s[j]){
                 contOcorrencias++;
                 break;
              }else{
                 break;
              }
          }
         if (x<contOcorrencias){ 
            x=contOcorrencias;
         }else{
            continue;
            contOcorrencias=0;
         }
     }
return contOcorrencias;
}

int main(){
  char string1[50];
  system("clear");
  printf("Insira a string.\n");
  scanf("%s",string1);
  printf("%d",iguaisConsecutivos (string1));
}

O que eu peço é que me digam onde o meu raciocínio(muitas vezes bastante complicado) está a falhar e não que me façam extractos de código para eu aplicar e simplesmente resolver o problema. Claro que toda a ajuda que me derem é sempre bem vinda, mas sinto mais necessidade de treinar o raciocínio do que aplicar o raciocínio dos outros. Aguardo a vossa ajuda o mais rápido possível.

E parabéns pelo forum, FENOMENAL! ;)

Editado por NERV
geshi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
siul72

Boas,

O que tens aî é um principio.... mas o primeito break nao faz muito sentido...

O que queres é:

1. Contar quantos chars consecutivos existem

1.1 guardar o tamanho

1.2 Se o tamanho actual é maior que o anterior guardar como maior

alem disso no teu código o que queres returnar é x e nao contOcorrencias

isto sao sö dicas, agora mãos a obra

2. No final da funcao devolver a sustring maior e o seu tamanho

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NERV

Boas,

O que tens aî é um principio.... mas o primeito break nao faz muito sentido...

O que queres é:

1. Contar quantos chars consecutivos existem

1.1 guardar o tamanho

1.2 Se o tamanho actual é maior que o anterior guardar como maior

alem disso no teu código o que queres returnar é x e nao contOcorrencias

isto sao sö dicas, agora mãos a obra

2. No final da funcao devolver a sustring maior e o seu tamanho

A descrição do problema é mesmo essa, tirando a parte que ele deve retornar tambem a substring, que não, nao deve ser devolvida. Apenas o seu tamanho é retornado, pelo que percebi.

Quanto ao break, sim... pus-me a ver e é mesmo, wtf ele está ali a fazer!??. Então tirei e claro, é a mesma coisa, depois substirui no final no return o contOcorrencias pelo x.E continua a dar o mesmo erro!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NERV

Assim já funciona direitinho. Agora agradecia que me dissessem o que podia melhorar em termos de desempenho na função, se é que é possível!

Ou se tem alguma coisa que podia melhorar aqui neste código!

int iguaisConsecutivos (char s[]){
int contOcorrencias;
int i;
int j;
int max;
i=0;
contOcorrencias=1;
max=0;

 for(j=1; s[j]!='\0'; j++){
  if (s[i]==s[j]){
   contOcorrencias++;
   i++;
  }else{
   i=j;
   contOcorrencias=1;
  }
  if (max<contOcorrencias){
   max=contOcorrencias;
  }else{
   continue;
   contOcorrencias=1;
  }
 }
return max;
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

"Uma árvore sem ramos não tem folhas"

mas não deixa de ser uma arvore ...

ps : resolve lá isso para eu poder apresentar a minha solução

Editado por HappyHippyHippo
  • Voto 1

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NERV

mas não deixa de ser uma arvore ...

ps : resolve lá isso para eu poder apresentar a minha solução

É assim, eu não devo estar a perceber bem o enunciado, só pode!

É que pelo que percebi, o exercício pede-me para calcular o tamanho da sub-string maior com caracteres iguais. Se existe apenas 1 carácter, então não há, "caracteres consecutivos", logo o valor a retornar é zero.

Agora apresente-me lá a sua resolução do problema sff!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

É que pelo que percebi, o exercício pede-me para calcular o tamanho da sub-string maior com caracteres iguais. Se existe apenas 1 carácter, então não há, "caracteres consecutivos", logo o valor a retornar é zero.

qual o teu resultado para a seguinte string ? : "abcdefghijklmnopqrstuvwxyz" ?


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.