2010-07-11 3 views
14

alors j'essaie d'insérer le caractère, que j'ai obtenu d'une chaîne, dans une autre chaîne. Here I mes actions: 1. Je veux utiliser simple:C++: insère char dans une chaîne

someString.insert(somePosition, myChar); 

2. Je suis une erreur, car insert nécessite (dans mon cas) char * ou une chaîne
3. Je suis en train de convertir char char * via stringstream:

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

4. Tout semble compiler avec succès, mais le programme se bloque le obtient à

conversion >> myCharInsert; 

ligne.

5.J'ai essaie de remplacer char * avec chaîne:

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

Tout semble être OK, mais quand someAnotherString.at(someOtherPosition) devient l'espace, programme se bloque.

Alors, comment faire correctement?

Répondre

26

Il existe un certain nombre de surcharges de std::string::insert. La surcharge pour l'insertion d'un seul caractère a en fait trois paramètres:

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

Le second paramètre, n, est le nombre de fois d'insérer c dans la chaîne à la position pos (à savoir, le nombre de fois pour répéter le caractère . Si vous ne souhaitez que d'insérer une instance du caractère, il suffit de passer un, par exemple,

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

Merci beaucoup! –

0
  1. Tout semble compiler avec succès, mais le programme se bloque l'obtient à
conversion >> myCharInsert; 

Le problème est que vous essayez de déréférencer (accès) myCharInsert (déclarée comme char*) qui pointe vers un emplacement aléatoire dans la mémoire (qui pourrait ne pas être à l'intérieur de l'espace d'adresses de l'utilisateur) et ce comportement est Undefined Behavior (crash sur la plupart des implémentations).

EDIT

Pour insérer une char dans une chaîne string& insert (size_t pos1, size_t n, char c); utiliser overload.

extra

Pour convertir char en std::string lire this réponse

1

est de vous Simplest fournir une fonction qui transforme un caractère dans une chaîne.Il y a beaucoup de façons de le faire, comme

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

Ensuite, vous pouvez simplement dire:

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

et utiliser la fonction dans d'autres cas où vous voulez une chaîne mais qui ont un omble chevalier.

Questions connexes