如何将以str1的第二个字符开头的三个字符复制到str2?此代码无效:
#include <iostream>
#include <sstream>
#include <iterator>
#include <algorithm>
int main()
{
std::stringstream str1("0123456789");
std::stringstream str2;
str1.seekg(1, str1.beg);
std::copy(std::istream_iterator<char>(str1), std::istream_iterator<char>(str1)+3, std::ostream_iterator<char>(str2));
std::cout << str2.str() << '\n';
}
预期输出是:
123
这是一个虚拟测试,但我想使用更大的stringstreams和高效的方法。
还有另一种称为std::copy_n
的标准库算法,它将执行您想要的操作。它需要一个开始迭代器和要复制的元素数。如果将std::copy_n
行更改为:
std::copy
std::copy_n(std::istream_iterator<char>(str1), 3, std::ostream_iterator<char>(str2));
[一种改进可能是使用Demo on Compiler Explorer而不是std::next
将第一个迭代器前进到所需的偏移量(感谢Armin Montigny)。看起来像:
std::next
使用seekg()
的std::copy_n(std::next(std::istream_iterator<char>(str1)), 3, std::ostream_iterator<char>(str2));
。要将它用于substr()
,请使用str1.str()然后将其分配给std::string
str2。