[英]Reverse Iterating Over Characters of String in C++
我想打印一個字符串的反面
#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++11 中這應該沒問題,因為它打印空字符,但在早期版本中,它也可能是未定義的行為。 這意味着任何事情都可能發生,包括任何類型的錯誤,甚至是預期的行為。
如果它在您的系統上運行,但在您進行考試的系統上不起作用,則可能是因為考試系統使用的是未定義行為的舊版本。 或者它在兩個系統上都是未定義的行為,只是以不同的方式表現出來。
@Blaze 已經回答了為什么訪問str[str.size()]
可能會導致問題。
在迭代類似數組時避免這些問題的一種方法是使用iterator
- 在您的情況下reverse_iterator
可以解決問題:
std::string::reverse_iterator itr = str1.rbegin();
while (itr != str1.rend())
std::cout << *itr++;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.