试图使用迭代器复制字符串的反向?

时间:2018-06-13 01:58:47

标签: string iterator

此代码在第7行给出错误? 为什么*它= * rit无法正常工作?

string temp;
string::reverse_iterator rit;
rit = demo.rbegin();
string::iterator it;
it = temp.begin();
for (; rit != demo.rend(); rit++, it++)
{
    *it = *rit;
}

2 个答案:

答案 0 :(得分:0)

尝试this

#include <iostream>
#include <string>
#include <iterator>

int main()
{
    std::string s = "Hello, world";
    std::reverse_iterator<std::string::iterator> r = s.rbegin();
    std::string rev(r, s.rend());
    std::cout << rev << '\n';
}

答案 1 :(得分:0)

回答为什么你的版本不起作用。

(我没有看到演示的定义 - 我认为它是一个非空字符串。)

temp虽然定义为空字符串。 你的循环检查&#34; rit&#34;但不是&#34;它&#34;如果2个字符串具有相同的长度,这可能没问题。

&#34;它&#34;正试图沿着一个空字符串进行迭代,这就是解除引用它失败的原因。

如果temp已经是一个具有正确长度的字符串,那么它可以被迭代并成功编辑。

您可以通过

实现这一目标
temp.resize(demo.length());

或只是

temp = demo;
在循环之前