Dev - C++ - Borrar un carácter de una secuencia de caracteres

 
Vista:
sin imagen de perfil
Val: 19
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Borrar un carácter de una secuencia de caracteres

Publicado por Federico (11 intervenciones) el 12/12/2017 23:12:42
Buenas tengo que hacer un ejercicio que dada una secuencia de caracteres, le des un carácter a borrar y te elimine ese carácter de toda la secuencia, la cosa es que cuando sale ese carácter consecutivo solo se borra una vez, aquí les dejo el código.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <iostream>
using namespace std;
 
class SecuenciaCaracteres{
private:
   static const int TAMANIO = 100;
   char vector_privado[TAMANIO];
   int total_utilizados;
public:
   SecuenciaCaracteres()
      :total_utilizados(0)
   {
   }
 
   int Capacidad(){
      return TAMANIO;
   }
 
   int TotalUtilizados(){
      return  total_utilizados;
   }
 
   void Aniade(char  nuevo){
      if (total_utilizados  <  TAMANIO){
         vector_privado[total_utilizados]  =  nuevo;
         total_utilizados++;
      }
   }
 
   char Elemento(int  indice){
      return  vector_privado[indice];
   }
 
   void Modifica(int indice_componente, char nuevo){
      if (indice_componente >= 0  &&  indice_componente < total_utilizados)
         vector_privado[indice_componente] = nuevo;
   }
 
   void Imprimir (){
	for (int i=0; i<total_utilizados; i++){
		cout << vector_privado[i] << " , ";
	   }
   }
 
   void Elimina (int posicion){
      if (posicion >= 0 && posicion < total_utilizados){
         int tope = total_utilizados-1;
 
         for (int i = posicion ; i < tope ; i++)
            vector_privado[i] = vector_privado[i+1];
 
         total_utilizados--;
      }
   }
 
   void EliminarOcurrencias (char a_borrar){
   	for (int i=0; i<total_utilizados; i++){
   		if (vector_privado[i] == a_borrar)
   			Elimina (i);
	 }
   }
 
 
};
 
 
int main(){
   const char TERMINADOR = '#';
   int total_introducidos;
   char caracter;
   char caracter_a_borrar;
   int capacidad_secuencia;
   SecuenciaCaracteres secuencia;
 
	cout << "Introduzca los caracteres(Terminador: #): " << endl;
 
   total_introducidos = 0;
   capacidad_secuencia = secuencia.Capacidad();
   caracter = cin.get();
 
   while (caracter != TERMINADOR && total_introducidos < capacidad_secuencia){
      secuencia.Aniade(caracter);
      caracter = cin.get();
   }
 
   cout << "Introduzca el caracter a borrar: " << endl;
   cin >> caracter_a_borrar;
 
   secuencia.EliminarOcurrencias (caracter_a_borrar);
   secuencia.Imprimir();
 
}

Seguramente haya que retocar alguna tonteria, si me pueden ayudar.
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Dionicio
Val: 168
Ha aumentado 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

re: Borrar un carácter de una secuencia de caracteres

Publicado por Dionicio (57 intervenciones) el 13/12/2017 16:15:45
En void EliminarOcurrencias (char a_borrar) en la siguiente sección:

1
2
if (vector_privado[i] == a_borrar)
   			Elimina (i);

Luego de eliminar debería disminuir a i en 1 para cuando itere nuevamente el bucle compare el carácter que se movió a la posición que se elimina.

Me imagino que si tienes por ejemplo "arroz" y eliminas la <r> el resultado final es "aroz". porque la segunda <r> no se analiza.
En cambio si haces lo que propongo debería resultar "aoz";
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar