将字符长度从数组复制到std :: string

时间:2013-07-01 03:52:08

标签: c++ arrays string copy strncpy

我正在尝试将5个字符从字符数组复制到std::string

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

然而,我得到了字符串以及一大堆我不想要的无法打印的字符。有任何想法吗?感谢。

2 个答案:

答案 0 :(得分:12)

只做

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

请参阅std::string constructor链接

答案 1 :(得分:0)

std::copy算法的作用是将一个源元素复制到另一个源元素之后,并在每个元素之后推进目标迭代器。

这假定

  • 目标容器的大小已设置得足够大,以适合您复制的所有元素
  • 或者使用迭代器类型,每次对其进行赋值时都会增加目标容器的大小。

因此,如果您想使用std::copy算法,有两种方法可以解决此问题:

  1. 在制作副本之前调整字符串大小:

    #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. 使用后插入迭代器而不是标准迭代器:

    #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;
    }
    
  3. 然而,正如其他人所指出的,如果目标只是在初始化时将前5个字符复制到字符串中,那么使用适当的构造函数显然是最佳选择:

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