2010-07-11 19 views
14

, por lo que estoy tratando de insertar el carácter, que obtuve de una cadena, en otra cadena. Here I mis acciones: 1. que quiero usar sencilla:C++: inserte char en una cadena

someString.insert(somePosition, myChar); 

2. Tengo un error, ya que requiere de inserción (en mi caso) char * o cadena
3. Estoy convirtiendo char a char * a través de stringstream:

stringstream conversion; 
char* myCharInsert; 
conversion << myChar //That is actually someAnotherString.at(someOtherPosition) if that matters; 
conversion >> myCharInsert; 
someString.insert(somePosition, myCharInsert); 

4. Todo parece estar compilar con éxito, pero el programa se bloquea llega a

conversion >> myCharInsert; 

línea.

5.I estoy tratando de reemplazar a char * con una cuerda:

stringstream conversion; 
char* myCharInsert; 
conversion << myChar //That is actually someAnotherString.at(someOtherPosition) if that matters; 
conversion >> myCharInsert; 
someString.insert(somePosition, myCharInsert); 

Todo parece estar bien, pero cuando se convierte en someAnotherString.at(someOtherPosition) espacio, el programa se bloquea.

Entonces, ¿cómo hago esto correctamente?

Respuesta

26

Hay un número de sobrecargas de std::string::insert. La sobrecarga para la inserción de un único carácter en realidad tiene tres parámetros:

string& insert(size_type pos, size_type n, char c); 

El segundo parámetro, n, es el número de veces para insertar c en la cadena en la posición pos (es decir, el número de veces que se repite el carácter . Si sólo desea insertar una instancia del carácter, simplemente pasarlo uno, por ejemplo,

someString.insert(somePosition, 1, myChar); 
+1

¡Muchas gracias! –

0
  1. todo parece ser la compilación de éxito, pero el programa se bloquea el se a
conversion >> myCharInsert; 

El problema es que usted está tratando de eliminar la referencia (acceso) myCharInsert (declarado como char*) que está apuntando a una ubicación aleatoria en la memoria (que podría no estar dentro del espacio de direcciones del usuario) y hacerlo es Comportamiento no definido (bloqueo en la mayoría de las implementaciones).

EDITAR

Para insertar un char en una cadena uso string& insert (size_t pos1, size_t n, char c);overload.

extra

Para convertir char en un std::string leer this respuesta

1

más simple es el de proporcionar a sí mismo con una función que convierte un carácter en una cadena.Hay un montón de maneras de hacer esto, como

string ToStr(char c) { 
    return string(1, c); 
} 

A continuación, puede decir:

someString.insert(somePosition, ToStr(myChar)); 

y utilizar la función en otros casos donde se desee una cadena, pero que tienen un char.

Cuestiones relacionadas