Сторнирование строки в C ++ с использованием обратного итератора? - PullRequest
3 голосов
/ 26 августа 2011

У меня есть следующий код, и я просто не могу найти способ перевернуть строки здесь:

stringstream convert;
string y="";
string z="";
convert << x;
string::reverse_iterator rit;
y=convert.str();
int j=0;
for (rit = y.rbegin(); rit < y.rend(); rit++){
    z[j] = *rit;
    j++;
}

Может кто-нибудь помочь мне с этим? Спасибо!

Ответы [ 4 ]

17 голосов
/ 26 августа 2011
z.assign(y.rbegin(), y.rend());

Или вы можете сделать это при строительстве:

std::string z(y.rbegin(), y.rend());

Если вы хотите изменить строку на месте, используйте std :: reverse:

std::reverse(y.begin(), y.end());
8 голосов
/ 26 августа 2011

Я бы сделал это:

stringstream convert;
convert << x;
string y(convert.str());
string z(y.rbegin(), y.rend());
return z;

Не нужно писать ручной цикл!

3 голосов
/ 26 августа 2011

Использование std :: reverse проще.

std::reverse( source.begin(), source.end() ); // source is of type std::string
2 голосов
/ 26 августа 2011

Я думаю, что ваша проблема в этом цикле:

int j=0;
for (rit = y.rbegin(); rit < y.rend(); rit++){
    z[j] = *rit;
    j++;
}

Обратите внимание, что вы пишете в строку z в разных позициях. Однако вы на самом деле не инициализировали z, чтобы в нем были какие-либо элементы, так что это запись в несуществующие местоположения, что приводит к неопределенному поведению.

Чтобы это исправить, вместо записи в местоположения в z попробуйте добавить новые символы в конец:

for (rit = y.rbegin(); rit < y.rend(); rit++){
    z += *rit;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...