[Ajuda] C

OK. Tenta moderar a linguagem, o fórum é publico... É chato.

A eficiência espacial e temporal são dois factores que estão relacionados, e normalmente um sobe quando o outro desce. Por isso é que digo que não há algoritmos perfeitos :)
A escolha de um ou outro é influenciada bastante pelo meio onde se deseja usar o algoritmo.
 
nao tou a querer ofender ninguem.. é so a pegar co povo xD

e o q eu disse so requer um array com o tamanho da quantidade de caracteres diferentes que hajam, q suponho eu, sejam tantos quantas letras diferentes ha.. prai 26 ou 27.. para ir la marcando as q ja encontrou

bem feitinho consegue se num so varrimento encontrar as letras repetidas e ir fazendo logo o shift para tras sempre q remove uma letra ja existente :P


nao leves a mal.. eu é q curto bue de eficiencia de algoritmos.. e keria elevar a discussao pra esse nivel :P

Ja que estás com tanto paleio porque é que não postas aqui o algoritmo?
 
Eu ja tinha explicado assim rapidito o algoritmo q pensei, num post acima, mas ja que desafias, aqui fica em código tb :P. Seria qq coisa deste genero:


Código:
void tiraRep(char string[]){
     char encontrado[26]; // array que guarda as letras ja encontradas
     int jaRem = 0; // numero de letras já removidas
     int i;

     for(i=0; i<26; i++) { encontrado[i] = 'n'; } // marcar todas as letras como nao encontradas
     i=0;
     
     while(string[i]!='\0'){
          if((string[i]>='a' && string[i]<='z') || (string[i]>='A' && string[i]<='Z')){ // ver se é uma letra
          if(encontrado[tolower(string[i])-'a']=='n') { 
               string[i-jaRem]=string[i];
               encontrado[tolower(string[i]) - 'a']='s'; }
          else{ jaRem++; }
          }
          i++;
     }
     string[i-jaRem]='\0';
}
não sei se tá funcional.. mas tb se precisar deve ser so um acerto ou outro.
 
Última edição:
Back
Topo