Test Foro de elhacker.net SMF 2.1

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 (cpp) [Seleccionar]
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
bool serepite(char , string );
void elimina(char , string& );

int main(){
     string frase;
     cout << "frase" << endl;
     getline(cin,frase);
     cin >> clave;
     for(int i=0;i<frase.size();++i ){
   if(serepite(frase[i],frase))
       elimina(frase[i],frase);
  }
  cout<< frase<<endl;


       return 0;}

bool serepite(char b, string cad){
   int contador = 0;
   for(int i =0;i<cad.size();++i)
       if(b==cad[i])
           contador++;
       if (contador>1)
           return true;
       return false;
   }

void elimina(char c, string &cad){
   for(int i=0;i<cad.size();++i)
       if(c==cad[i]){
           cad.erase(i,1);
       }
   }

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.