NERV Posted May 22, 2015 Report Share Posted May 22, 2015 (edited) 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 May 22, 2015 by NERV geshi Link to comment Share on other sites More sharing options...
siul72 Posted May 22, 2015 Report Share Posted May 22, 2015 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 More sharing options...
NERV Posted May 22, 2015 Author Report Share Posted May 22, 2015 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 More sharing options...
NERV Posted May 22, 2015 Author Report Share Posted May 22, 2015 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 More sharing options...
HappyHippyHippo Posted May 22, 2015 Report Share Posted May 22, 2015 Assim já funciona direitinho a sério ? testa esta string : "a" IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
NERV Posted May 22, 2015 Author Report Share Posted May 22, 2015 (edited) a sério ? testa esta string : "a" "Uma árvore sem ramos não tem folhas" Edited May 22, 2015 by NERV Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted May 22, 2015 Report Share Posted May 22, 2015 (edited) "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 Edited May 22, 2015 by HappyHippyHippo 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
NERV Posted May 23, 2015 Author Report Share Posted May 23, 2015 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 More sharing options...
HappyHippyHippo Posted May 23, 2015 Report Share Posted May 23, 2015 É 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 Portugol Plus Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now