2013-07-01 4 views
2

J'essaie de copier 5 caractères à partir d'un tableau de caractères dans un std::stringlongueur Copie des caractères de tableau à std :: string

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

Cependant, je reçois la chaîne ainsi que tout un tas de caractères non imprimables que je fais ne veut pas. Des idées? Merci.

Répondre

8

Il suffit de faire

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

voir std::string constructor lien

+0

grâce, sera accepter quand SO me le permet. – user2537688

+0

@ user2537688 vous êtes les bienvenus. – billz

+0

Alternativement: 'std :: string first (nom, 5);' –

0

Qu'est-ce que l'algorithme std::copy est une copie de l'un élément source après l'autre, et faire avancer le iterator de destination après chaque élément.

Cela suppose que

  • soit la taille du conteneur de destination a été mis en assez grand pour tous les éléments que vous copiez,
  • ou que vous utilisez un type iterator qui augmente la taille du conteneur de destination chaque fois que vous faites une cession.

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

  1. Redimensionner 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 retour-insérer l'itérateur 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'a fait par d'autres, si le but est tout simplement de copier les 5 premiers caractères dans la chaîne au moment de l'initialisation, en utilisant le constructeur approprié est clairement la meilleure option:

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