【问题标题】:trying to copy reverse of a string using iterators?试图使用迭代器复制字符串的反向?
【发布时间】:2018-06-13 01:58:47
【问题描述】:

此代码在第 7 行出现错误? 为什么 *it=*rit 不起作用?

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

【问题讨论】:

标签: string iterator


【解决方案1】:

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

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

temp 被定义为一个空字符串。 您的循环检查“rit”而不是“it”,如果 2 个字符串的长度相同,这可能没问题。

"it" 试图沿空字符串进行迭代,这就是解引用它失败的原因。

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

你可以做到这一点

temp.resize(demo.length());

或者只是

temp = demo;

在循环之前。

【讨论】:

  • 另一种方法是使用 temp.push_back(*rit);而不是作业
【解决方案2】:

试试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';
}

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 2021-12-17
    • 2018-10-10
    • 1970-01-01
    • 2018-10-31
    • 2021-04-01
    • 1970-01-01
    • 2010-10-27
    • 2015-11-28
    相关资源
    最近更新 更多