C++: insérez char dans une chaîne de caractères

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

someString.insert(somePosition, myChar);

2. J'ai eu une erreur, car insert nécessite (dans mon cas) char* ou string

3. Je suis la conversion de 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 être compilé avec succès, mais le programme plante le gets à

conversion >> myCharInsert;

ligne.

5.Je suis en train de remplacer char* avec de la ficelle:

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

Tout semble OK, mais quand someAnotherString.at(someOtherPosition) devient espace, le programme s'écrase.

alors comment faire correctement?

15
demandé sur James McNellis 2010-07-11 17:58:17

3 réponses

Il y a un certain nombre de surcharges de std::string::insert. La surcharge pour insérer 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 afin d'insérer c dans la chaîne en position pos (c'est à dire, le nombre de répétitions du caractère. Si vous voulez seulement insérer une instance du caractère, passez-en une, par exemple,

someString.insert(somePosition, 1, myChar);
28
répondu James McNellis 2013-08-28 17:41:45

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

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

alors vous pouvez simplement dire:

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

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

1
répondu 2010-07-11 14:02:19
  1. tout semble être compilé avec succès, mais le programme plante le gets à
conversion >> myCharInsert;

Le problème, c'est que vous essayez de déréférencement(accès) myCharInsert(déclaré comme un char*) qui pointe vers un emplacement aléatoire dans la mémoire(qui pourrait ne pas être à l'intérieur de l'espace d'adresse de l'utilisateur) et qui le fait est un comportement non défini (plantage sur la plupart des implémentations).

EDIT

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 dans un std::string lire réponse

0
répondu Prasoon Saurav 2017-05-23 12:30:39