Foros del Web » Programación para mayores de 30 ;) » C/C++ »

¿Cómo sustituir un caracter de un string por otro múltiple?

Estas en el tema de ¿Cómo sustituir un caracter de un string por otro múltiple? en el foro de C/C++ en Foros del Web. Tal y como indico en el enunciado, quisiera saber cómo podría sustituir un carácter de un string por uno múltiple; por ejemplo, reemplazar las "a" ...
  #1 (permalink)  
Antiguo 08/01/2012, 14:20
 
Fecha de Ingreso: diciembre-2011
Mensajes: 14
Antigüedad: 12 años, 3 meses
Puntos: 0
Pregunta ¿Cómo sustituir un caracter de un string por otro múltiple?

Tal y como indico en el enunciado, quisiera saber cómo podría sustituir un carácter de un string por uno múltiple; por ejemplo, reemplazar las "a" por "gag":
Cita:
casa -> cgagsgag
Para ello he intentado hacerlo utilizando el siguiente código pero sólo me lo reemplaza por el segundo ("."):

Código C++:
Ver original
  1. string frase;
  2.  
  3.     getline(cin, frase);
  4.  
  5.     for (int k = 0; k < strlen(frase.c_str()); k++)
  6.     {
  7.         if (frase[k] == 'a')
  8.         {
  9.             frase[k] = 'gag';
  10.         }
  11.     }
  12.  
  13.     cout << frase << endl;

Un saludo
  #2 (permalink)  
Antiguo 08/01/2012, 18:03
Avatar de CapacProg  
Fecha de Ingreso: marzo-2010
Ubicación: Lima - Perú
Mensajes: 324
Antigüedad: 14 años, 1 mes
Puntos: 71
Respuesta: ¿Cómo sustituir un caracter de un string por otro múltiple?

Hola, en su implementación veo el siguiente error
Código C++:
Ver original
  1. frase[k] = 'gag';
ahí Ud. esta tratando de reemplazar un caracter por varios caracteres, lo cuál no se puede ya que frase[k] sólo tiene memoria para un carácter, y por cierto no por estar encerrados en apostrofes van a ser considerados todos como un caracter, ese es un error muy grave.

Creo que Ud. podría resolver su problema de la siguiente manera:

Código C++:
Ver original
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. int main() {
  6.     string str = "Hola mundo como estas";
  7.     char c = 'a';
  8.     string reemplazo = "xxx";
  9.  
  10.     for (int i = 0; i < (int)str.length(); ++i) {
  11.         if(str[i]==c)
  12.         {
  13.             str.replace(i,1,reemplazo);
  14.         }
  15.     }
  16.  
  17.     cout << str << endl;
  18.     return 0;
  19. }
__________________
%
El mejor guerrero no es el que triunfa siempre sino el que vuelve sin miedo a la batalla.
%
  #3 (permalink)  
Antiguo 09/01/2012, 14:27
 
Fecha de Ingreso: diciembre-2011
Mensajes: 14
Antigüedad: 12 años, 3 meses
Puntos: 0
Exclamación Respuesta: ¿Cómo sustituir un caracter de un string por otro múltiple?

Cita:
Iniciado por CapacProg Ver Mensaje
Hola, en su implementación veo el siguiente error
Código C++:
Ver original
  1. frase[k] = 'gag';
ahí Ud. esta tratando de reemplazar un caracter por varios caracteres, lo cuál no se puede ya que frase[k] sólo tiene memoria para un carácter, y por cierto no por estar encerrados en apostrofes van a ser considerados todos como un caracter, ese es un error muy grave.

Creo que Ud. podría resolver su problema de la siguiente manera:

Código C++:
Ver original
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. int main() {
  6.     string str = "Hola mundo como estas";
  7.     char c = 'a';
  8.     string reemplazo = "xxx";
  9.  
  10.     for (int i = 0; i < (int)str.length(); ++i) {
  11.         if(str[i]==c)
  12.         {
  13.             str.replace(i,1,reemplazo);
  14.         }
  15.     }
  16.  
  17.     cout << str << endl;
  18.     return 0;
  19. }
Buenas noches; tal y como te he dicho antes, el código que me has dado me es totalmente útil pero hay un pequeño problema, que es el siguiente:

Si quiero reemplazar por el caracter al que se corresponde en un determinado momento un array (arrayy[numero]), sólo puedo escribirlo una vez dentro del apartado de replace() correspondiente al texto sustituto, por lo que no puedo obtener resultados que den: (arrayy[numero]) + "(lo que sea)" + (arrayy[numero]), que es algo así (lo que querría).

Saludos
  #4 (permalink)  
Antiguo 09/01/2012, 14:32
Avatar de CapacProg  
Fecha de Ingreso: marzo-2010
Ubicación: Lima - Perú
Mensajes: 324
Antigüedad: 14 años, 1 mes
Puntos: 71
Respuesta: ¿Cómo sustituir un caracter de un string por otro múltiple?

La verdad no te explicas bien, en la u'tima parte pon un ejemplo concreto con una cadena de test y veremos. Aunque percibo que lo que Ud. desea es hacer un sólo reemplazo de una posición dada. Para ello debes de modificar el for para que no reemplace todos las ocurrencias sino con un flag lo que uno quiere.
__________________
%
El mejor guerrero no es el que triunfa siempre sino el que vuelve sin miedo a la batalla.
%
  #5 (permalink)  
Antiguo 10/01/2012, 08:50
 
Fecha de Ingreso: diciembre-2011
Mensajes: 14
Antigüedad: 12 años, 3 meses
Puntos: 0
Exclamación Respuesta: ¿Cómo sustituir un caracter de un string por otro múltiple?

Cita:
Iniciado por CapacProg Ver Mensaje
La verdad no te explicas bien, en la u'tima parte pon un ejemplo concreto con una cadena de test y veremos. Aunque percibo que lo que Ud. desea es hacer un sólo reemplazo de una posición dada. Para ello debes de modificar el for para que no reemplace todos las ocurrencias sino con un flag lo que uno quiere.
Buenas tardes; a continuación te explico.

Si configuro string.replace() para que reemplace lo que sea por el valor de un array, incluyendo entonces algo como arrayy[numero] en el hueco (el tercero es) correspondiente de la función replace(), no hay problema pero si se da si vuelvo a añadir ese array en el apartado -caso en el que se cuelga la aplicación- para que de una determinada salida.

Por ejemplo:

Código C++:
Ver original
  1. for (int i = 0; i < (int)str.length(); ++i) {
  2.         if(str[i]==c)
  3.         {
  4.             str.replace(i,1,str[i] + "o" + str[i]); // Como veis, he reescrito el array, caso que hace a la aplicación "colgarse" a no ser que ponga uno solo.
  5.         }
  6.     }

¿Cómo solucionar esto?

Saludos
  #6 (permalink)  
Antiguo 10/01/2012, 10:41
Avatar de CapacProg  
Fecha de Ingreso: marzo-2010
Ubicación: Lima - Perú
Mensajes: 324
Antigüedad: 14 años, 1 mes
Puntos: 71
Respuesta: ¿Cómo sustituir un caracter de un string por otro múltiple?

Antes debe de revisar la documentacíon de la librería string http://www.cplusplus.com/reference/string/string/
Luego se dará cuenta que no se puede formar una cadena con la instrucción que da.

Código C++:
Ver original
  1. str[i] + "o" + str[i];

le recomiendo que use el método assing para este efecto

Código C++:
Ver original
  1. reemplazo.assign(1, c);
  2. reemplazo.insert(1, "o");
  3. reemplazo.insert(2, 1, c);
  4. str.replace(i, 1, reemplazo);

Tenga cuidado que al hacer ese reemplazo de 1 caracter por 3 la longitud de la cadena se modifica (por ende el for tambien) hasta puedo inferir que se va hacer infinito ya que se coloca otrs c cada vez al hallar un c.
Si no lo resuelve no me quedará otra que darle el código ya que se puede complicar más, pero antes intente.
__________________
%
El mejor guerrero no es el que triunfa siempre sino el que vuelve sin miedo a la batalla.
%
  #7 (permalink)  
Antiguo 10/01/2012, 15:09
 
Fecha de Ingreso: diciembre-2011
Mensajes: 14
Antigüedad: 12 años, 3 meses
Puntos: 0
Exclamación Respuesta: ¿Cómo sustituir un caracter de un string por otro múltiple?

Buenas noches; en primer lugar muchas gracias por tu respuesta pero no me ha funcionado pues estoy en las mismas, es decir, la aplicación sigue colgándose.

El código ha quedado así:

Código C++:
Ver original
  1. for (int k = 0; k < strlen(frase.c_str()); k++)
  2.     {
  3.         if (frase[k] == 'a')
  4.         {
  5.             aux2.assign(1, frase[k]);
  6.             aux2.insert(1, "o");
  7.             aux2.insert(2, 1, frase[k]);
  8.             frase.replace(k, 1, aux2);
  9.             // de ahí debería imprimirse "aoa"
  10.         }
  11.     }

Saludos
  #8 (permalink)  
Antiguo 10/01/2012, 18:29
Avatar de CapacProg  
Fecha de Ingreso: marzo-2010
Ubicación: Lima - Perú
Mensajes: 324
Antigüedad: 14 años, 1 mes
Puntos: 71
Respuesta: ¿Cómo sustituir un caracter de un string por otro múltiple?

Cita:
Iniciado por CapacProg Ver Mensaje
Tenga cuidado que al hacer ese reemplazo de 1 caracter por 3 la longitud de la cadena se modifica (por ende el for tambien) hasta puedo inferir que se va hacer infinito ya que se coloca otrs c cada vez al hallar un c.
Si no lo resuelve no me quedará otra que darle el código ya que se puede complicar más, pero antes intente.
Te mencione que debes de prestar a tención que cada vez que reemplazas un caracter por otros 3, ya que estas modificando la longitud de la cadena y eso te acarrerá a un for infinito, pues este usa como limite la cantidad de caracteres, que contiene para hacer ese fin. Y en ese problema estas ahora.

Ponga más atención ya que las personas cedemos un poco de nuestro valioso tiempo para ayudarte.
__________________
%
El mejor guerrero no es el que triunfa siempre sino el que vuelve sin miedo a la batalla.
%
  #9 (permalink)  
Antiguo 12/01/2012, 10:28
 
Fecha de Ingreso: diciembre-2011
Mensajes: 14
Antigüedad: 12 años, 3 meses
Puntos: 0
Pregunta Respuesta: ¿Cómo sustituir un caracter de un string por otro múltiple?

Cita:
Iniciado por CapacProg Ver Mensaje
Te mencione que debes de prestar a tención que cada vez que reemplazas un caracter por otros 3, ya que estas modificando la longitud de la cadena y eso te acarrerá a un for infinito, pues este usa como limite la cantidad de caracteres, que contiene para hacer ese fin. Y en ese problema estas ahora.

Ponga más atención ya que las personas cedemos un poco de nuestro valioso tiempo para ayudarte.
Buenas tardes; ese aspecto ya lo he entendido pero cómo puedo conseguir la salida deseada de modo que no se acarree un for infinito. ¿He de usar un while o he de hacer otra cosa?

Saludos.
  #10 (permalink)  
Antiguo 12/01/2012, 14:41
Avatar de CapacProg  
Fecha de Ingreso: marzo-2010
Ubicación: Lima - Perú
Mensajes: 324
Antigüedad: 14 años, 1 mes
Puntos: 71
Respuesta: ¿Cómo sustituir un caracter de un string por otro múltiple?

En el mismo for se puede. Como ya esta muy largo y en vista que no ha podido solucionar con mucho éxito el problema le cedo este código para que realice sus pruebas.
Código C++:
Ver original
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. int main(int argc, char** argv) {
  6.     string str = "Hola mundo como estas";
  7.     char c = 'a';
  8.     string reemplazo;
  9.     for (int i = 0; i < (int) str.length(); ++i) {
  10.         if (str[i] == c) {
  11.             reemplazo.assign(1, c);
  12.             reemplazo.insert(1, "o");
  13.             reemplazo.insert(2, 1, c);
  14.             str.replace(i, 1, reemplazo);
  15.             i+=2;//Aquí esta el truco para impedir que el for sea infinito
  16.         }
  17.     }
  18.     cout << str << endl;
  19.     return 0;
  20. }
__________________
%
El mejor guerrero no es el que triunfa siempre sino el que vuelve sin miedo a la batalla.
%
  #11 (permalink)  
Antiguo 12/01/2012, 15:27
 
Fecha de Ingreso: diciembre-2011
Mensajes: 14
Antigüedad: 12 años, 3 meses
Puntos: 0
De acuerdo Respuesta: ¿Cómo sustituir un caracter de un string por otro múltiple?

Muchas gracias por la respuesta pues me funcionó.

Un saludo.
  #12 (permalink)  
Antiguo 12/01/2012, 17:00
Avatar de CapacProg  
Fecha de Ingreso: marzo-2010
Ubicación: Lima - Perú
Mensajes: 324
Antigüedad: 14 años, 1 mes
Puntos: 71
Respuesta: ¿Cómo sustituir un caracter de un string por otro múltiple?

Ok, no hay problema.
__________________
%
El mejor guerrero no es el que triunfa siempre sino el que vuelve sin miedo a la batalla.
%

Etiquetas: c++, string, sustituir, caracteres
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:33.