C ++如何向后打印字符串?

时间:2016-07-15 22:25:41

标签: c++ string

我正试图用这样的迭代器向后打印std::string

std::string back = "hello";
for(std::string::iterator it=back.end(); it!=back.begin(); --it)
{
    std::cout << (*it);
}

但输出只会打印出来:

olle

为什么不打印h?我尝试了几种不同的东西并玩弄它,但我似乎无法弄清楚原因。任何帮助将不胜感激,谢谢! :)

3 个答案:

答案 0 :(得分:13)

std::string back = "hello";
for (std::string::reverse_iterator it = back.rbegin(); it != back.rend(); ++it)
{
    std::cout << (*it);
}

答案 1 :(得分:6)

std::string::iterator it=back.end();

it初始化为end()。然后,在循环内部:

std::cout << (*it);

由于it的初始值为end(),因此取消引用它是未定义的行为,结果不可预测。

正确的做法是在 取消引用之前递减it

for(std::string::iterator it=back.end(); it!=back.begin(); )
{
    --it;
    std::cout << (*it);
}

答案 2 :(得分:5)

如果你不想要for循环:

#include <algorithm>

std::string string_back = "hello";
std::reverse(string_back.begin(), string_back.end());
std::cout << string_back; // prints 'olleh'