我正试图将字符数组中的5个字符复制到std::string
中
char name[] = "Sally Magee";
std::string first;
copy(name, name + 5, first.begin()); //from #include <algorithm>
std::cout << first.c_str();
然而,我得到了字符串加上一大堆我不想要的无法打印的字符。有什么想法吗?谢谢
只需进行
char name[] = "Sally Magee";
std::string first(name, name + 5);
std::cout << first << std::endl;
请参阅std::string构造函数链接
std::copy
算法所做的是一个源元素接一个地复制,并在每个元素之后推进目标迭代器。
这假设
- 目标容器的大小已设置为足够大以适合您复制的所有元素
- 或者使用迭代器类型,每次对目标容器进行赋值时都会增加目标容器的大小
因此,如果你想使用std::copy
算法,有两种方法可以解决这个问题:
-
复制前调整字符串大小:
#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; }
-
使用后插入迭代器而不是标准迭代器:
#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);