web-dev-qa-db-fra.com

C ++: insérer un caractère dans une chaîne

donc j'essaie d'insérer le caractère, que j'ai obtenu à partir d'une chaîne, dans une autre chaîne. Ici, je mes actions: 1. Je veux utiliser simple:

someString.insert(somePosition, myChar);

2. J'ai une erreur, car l'insertion requiert (dans mon cas) char * ou string
3. Je convertis char en 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 se compiler avec succès, mais le programme plante le

conversion >> myCharInsert;

ligne.

5. J'essaie de remplacer char * par une 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 aller bien, mais lorsque someAnotherString.at(someOtherPosition) devient de l'espace, le programme plante.

Alors, comment dois-je procéder correctement?

23
user380041

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 deuxième paramètre, n, est le nombre de fois où insérer c dans la chaîne à la position pos (c'est-à-dire le nombre de fois pour répéter le caractère. Si vous ne voulez insérer une instance du caractère, passez-en simplement une, par exemple,

someString.insert(somePosition, 1, myChar);
40
James McNellis

Le plus simple est de vous fournir une fonction qui transforme un caractère en chaîne. Il existe de nombreuses façons de procéder, telles que

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

Ensuite, vous pouvez simplement dire:

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

et utilisez la fonction dans d'autres cas où vous voulez une chaîne mais avez un caractère.

2
anon
  1. Tout semble se compiler avec succès, mais le programme plante le
conversion >> myCharInsert;

Le problème est que vous essayez de déréférencer (accès) myCharInsert (déclaré en tant que char*) Qui pointe vers un emplacement aléatoire en mémoire (qui peut ne pas se trouver dans l'espace d'adressage de l'utilisateur) et cela est un comportement indéfini (crash sur la plupart des implémentations).

[~ # ~] modifier [~ # ~]

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

Extra

Pour convertir char en un std::string Lisez this answer

0
Prasoon Saurav