Я пытаюсь скопировать 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 constructor ссылка на сайт
Что за 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);