5 votes

Copie la longueur des caractères du tableau vers std::string

J'essaie de copier 5 caractères d'un tableau de caractères dans un fichier std::string

char name[] = "Sally Magee";
std::string first;
copy(name, name + 5, first.begin()); //from #include <algorithm>
std::cout << first.c_str();

Cependant, j'obtiens la chaîne de caractères plus un tas de caractères non imprimables que je ne veux pas. Avez-vous une idée ? Merci.

17voto

billz Points 28166

Fais-le.

char name[] = "Sally Magee";
std::string first(name, name + 5);
std::cout << first << std::endl;

voir constructeur std::string lien

1voto

jogojapan Points 26661

Qu'est-ce que le std::copy est de copier un élément source après l'autre, et d'avancer l'itérateur de destination après chaque élément.

Cela suppose que

  • soit la taille du conteneur de destination a été définie comme suffisamment grande pour contenir tous les éléments que vous copiez,
  • soit vous utilisez un type d'itérateur qui augmente la taille du conteneur de destination chaque fois que vous lui faites une affectation.

Par conséquent, si vous voulez utiliser le std::copy algorithme, il y a deux façons de résoudre ce problème :

  1. Redimensionnez la chaîne avant de faire les copies :

    #include <iostream>
    #include <string>
    #include <algorithm>
    
    int main()
    {
      char source[] = "hello world";
    
      std::string dest;
      dest.resize(5);
      std::copy(source,source+5,begin(dest));
    
      std::cout << dest << std::endl;
    
      return 0;
    }
  2. Utilisation d'un itérateur d'insertion arrière au lieu de l'itérateur standard :

    #include <iostream>
    #include <string>
    #include <algorithm>
    #include <iterator>
    
    int main()
    {
      char source[] = "hello world";
    
      std::string dest;
      std::copy(source,source+5,std::back_inserter(dest));
    
      std::cout << dest << std::endl;
    
      return 0;
    }

Cependant, comme l'ont souligné d'autres personnes, si le but est simplement de copier les 5 premiers caractères dans la chaîne au moment de l'initialisation, l'utilisation du constructeur approprié est clairement la meilleure option :

std::string dest(source,source+5);

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