簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM