从数组中复制指定长度的字符到std::string

5
我正在尝试从字符数组中复制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个回答

18

只需要去做

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

请查看std::string构造函数链接。


4
另一种写法:std::string first(name, 5); (该语句的作用是截取字符串name的前5个字符作为新字符串first的值) - Remy Lebeau

1
< p > std::copy算法的作用是将一个源元素复制到另一个元素之后,并在每个元素后推进目标迭代器。< /p > < p > 这假定:< /p >
  • 要么目标容器的大小已设置足够大以适应您复制的所有元素,
  • 要么您使用一种迭代器类型,每次对其进行分配时都会增加目标容器的大小。
< p > 因此,如果要使用std::copy算法,有两种解决方法:< /p >
  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;
    }
    

然而,正如其他人所指出的,如果目标仅是在初始化时将前5个字符复制到字符串中,使用适当的构造函数显然是最佳选择:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接