212 votes

Comment ajouter un caractère à une std::string ?

L'opération suivante échoue avec l'erreur suivante prog.cpp:5:13: error: invalid conversion from ‘char’ to ‘const char*’

int main()
{
  char d = 'd';
  std::string y("Hello worl");
  y.append(d); // Line 5 - this fails
  std::cout << y;
  return 0;
}

J'ai également essayé ce qui suit, qui compile mais se comporte de manière aléatoire au moment de l'exécution :

int main()
{
  char d[1] = { 'd' };
  std::string y("Hello worl");
  y.append(d);
  std::cout << y;
  return 0;
}

Je suis désolé pour cette question stupide, mais j'ai cherché sur google, ce que j'ai pu voir c'est juste "char array to char ptr", "char ptr to char array", etc.

0 votes

Une erreur de compilation oui j'ai oublié quelle est l'erreur, mais c'est raisonnable.

3 votes

Vous avez de meilleures réponses ci-dessous, mais vous pouvez faire fonctionner votre deuxième exemple comme suit char d[2] = {'d', 0} ; ou simplement char d[2] = "d" ; En fait, vous avez besoin d'un 0 pour terminer votre chaîne de style c que vous passez à append.

0 votes

270voto

AraK Points 38702
y += d;

J'utiliserais += au lieu de fonctions nommées.

2 votes

Pourquoi considérez-vous que += est meilleur que push_back ? Est-ce que c'est simplement parce qu'il y a moins de saisie ou avez-vous une autre raison ?

4 votes

Il y a moins de saisie. En gcc , basic_string::operator+= est juste un appel dans push_back .

2 votes

C'est plus naturel pour les chaînes de caractères. push_back est une fonction de conteneur, et une chaîne de caractères est une fonction spécialisée dans le STL :)

79voto

Ferdinand Beyer Points 27723

Utilice push_back() :

std::string y("Hello worl");
y.push_back('d')
std::cout << y;

20voto

Patrice Bernassola Points 7422

Pour ajouter un caractère à une var std::string à l'aide de la méthode append, vous devez utiliser cette surcharge :

std::string::append(size_type _Count, char _Ch)

Editer : Vous avez raison, j'ai mal compris le paramètre size_type, affiché dans l'aide contextuelle. Il s'agit du nombre de caractères à ajouter. L'appel correct est donc

s.append(1, d);

pas

s.append(sizeof(char), d);

Ou de la manière la plus simple :

s += d;

0 votes

Je pense que l'utilisation de sizeof n'est pas sémantiquement correcte ici (même si cela fonctionne car sizeof(char) est toujours égal à un). La méthode append est naturellement plus utile si vous voulez ajouter plusieurs copies du même caractère !!!!!!!!!!

1 votes

Pourquoi utilisez-vous sizeof(char) au lieu de 1 ? Vous voulez ajouter exactement une répétition de d Il suffit donc de le dire. En utilisant sizeof est trompeuse, car elle suggère que l'on doit dire à l'autre qu'il n'y a pas de problème. append la taille de l'octet du type de données utilisé (ce qui n'est pas le cas).

0 votes

Comme l'a dit Unclebens, la méthode append est vraiment plus utile lorsqu'il s'agit d'ajouter le même caractère plusieurs fois.

13voto

Brian R. Bondy Points 141769

En plus des autres constructeurs mentionnés, l'un des constructeurs de chaînes prend un caractère et le nombre de répétitions pour ce caractère. Vous pouvez donc l'utiliser pour ajouter un seul caractère.

std::string s = "hell";
s += std::string(1, 'o');

0 votes

Cela n'est ni plus rapide ni meilleur que += o push_back() .

6voto

Michael Berg Points 318

Essayez l'opérateur += texte du lien , méthode append() texte du lien , ou la méthode push_back() texte du lien

Les liens de ce billet contiennent également des exemples d'utilisation des API respectives.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X