пытаясь скопировать обратную строку с помощью итераторов? - PullRequest
0 голосов
/ 13 июня 2018

Этот код дает ошибку в 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;
}

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Чтобы ответить, почему ваша версия не работает.

(я не вижу определения для демо - я предполагаю, что это непустая строка.)

temp определена, хотя, как пустая строка.Ваш цикл проверяет «rit», но не «it», это может быть в порядке, если 2 строки имеют одинаковую длину.

«it» пытается перебрать пустую строку, и поэтому разыменование вызывает ошибку.

Если бы temp уже была строкой с правильной длиной, то ее можно было бы успешно повторить и отредактировать.

Этого можно добиться с помощью

temp.resize(demo.length());

или просто

temp = demo;

перед циклом.

0 голосов
/ 13 июня 2018

Попробуйте, как это :

#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';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...