我正在尝试将 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::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);