Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: pilo312 en 9 Mayo 2016, 17:54 pm



Título: eliminar elementos desordenados
Publicado por: pilo312 en 9 Mayo 2016, 17:54 pm
Mi duda es como hacer que al escribir una palabra como casa lo que salga en pantalla sea cas, osea se eliminen las repeticiones pero quede 1
Código
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. #include <vector>
  5. #include <algorithm>
  6. using namespace std;
  7. bool serepite(char , string );
  8. void elimina(char , string& );
  9.  
  10. int main(){
  11.      string frase;
  12.      cout << "frase" << endl;
  13.      getline(cin,frase);
  14.      cin >> clave;
  15.      for(int i=0;i<frase.size();++i ){
  16.    if(serepite(frase[i],frase))
  17.        elimina(frase[i],frase);
  18.   }
  19.   cout<< frase<<endl;
  20.  
  21.  
  22.        return 0;}
  23.  
  24. bool serepite(char b, string cad){
  25.    int contador = 0;
  26.    for(int i =0;i<cad.size();++i)
  27.        if(b==cad[i])
  28.            contador++;
  29.        if (contador>1)
  30.            return true;
  31.        return false;
  32.    }
  33.  
  34. void elimina(char c, string &cad){
  35.    for(int i=0;i<cad.size();++i)
  36.        if(c==cad[i]){
  37.            cad.erase(i,1);
  38.        }
  39.    }
  40.  
  41.  


Título: Re: eliminar elementos desordenados
Publicado por: MAFUS en 9 Mayo 2016, 18:18 pm
Se me ocurre que tengas un array vacío que sea el que mirarás si existen las letras repetidas o no.
Así, cuándo empieces una palabra con dicho array vacío (ej todo a 0). Miras la primera letra de la palabra. Si no existe en el array de palabras repetidas la incluyes Y apuntas la letra en la palabra destino. Si existe la letra en el array destino simplemente pasas a la siguiente letra de la palabra original y empiezas de nuevo.
Cuándo la palabra original se termine pones el array de letras repetidas a 0 para ser usado en la siguiente palabra.