Jump to content

Maior numero de ocorrências numa string!


NERV
 Share

Recommended Posts

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! 😉

Edited by NERV
geshi
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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!

Link to comment
Share on other sites

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;
}
Link to comment
Share on other sites

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!

Link to comment
Share on other sites

É 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
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.