我想打印一个字符串的反面
#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];
}
两个循环之间有什么区别?当它给出空指针时?
请参见here:
因此,在C ++ 11中,这应该很好,因为它会输出空字符,但是在早期版本中,它也可能是未定义的行为。这意味着任何事情都可能发生,包括任何类型的错误,甚至是预期的行为。
如果它在您的系统上运行,但在您要进行检查的系统上不起作用,则可能是因为检查系统使用的是旧版本,但行为不明确。或者这是两个系统上未定义的行为,只是以不同的方式表现出来。
@@ Blaze已经回答了为什么访问str[str.size()]
可能会引起问题。
避免类似数组迭代时出现这些问题的一种方法是使用iterator
-在您的情况下,reverse_iterator
可以解决问题:
std::string::reverse_iterator itr = str1.rbegin();
while (itr != str1.rend())
std::cout << *itr++;