在C ++中对字符串的字符进行反向迭代

问题描述 投票:2回答:2

我想打印一个字符串的反面

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string str = "no", str1 = "yes";
    for (int i = str.size() - 1; i >= 0; i--)
        cout << str[i];
    for (int j = str1.size(); j >= 0; j--) //without minus one
        cout << str1[j];
}

两个循环之间有什么区别?当它给出空指针时?

c++ string size reverse
2个回答
2
投票

请参见here

enter image description here

因此,在C ++ 11中,这应该很好,因为它会输出空字符,但是在早期版本中,它也可能是未定义的行为。这意味着任何事情都可能发生,包括任何类型的错误,甚至是预期的行为。

如果它在您的系统上运行,但在您要进行检查的系统上不起作用,则可能是因为检查系统使用的是旧版本,但行为不明确。或者这是两个系统上未定义的行为,只是以不同的方式表现出来。


1
投票

@@ Blaze已经回答了为什么访问str[str.size()]可能会引起问题。

避免类似数组迭代时出现这些问题的一种方法是使用iterator-在您的情况下,reverse_iterator可以解决问题:

std::string::reverse_iterator itr = str1.rbegin();

while (itr != str1.rend())
   std::cout << *itr++;
© www.soinside.com 2019 - 2024. All rights reserved.