2016-12-02 65 views
-5

下面有一個程序。我不瞭解它如何反轉字符數組。我的意思是它工作正常,它確實反轉了用戶存儲在char數組中的字符串,但是我想知道它是如何工作的以及它如何反轉順序?基本上我不理解第一個for循環,它沒有任何在body中的語句加上for循環的第一部分丟失。請用簡單而簡單的詞語解釋,而不是用典型或難懂的詞語解釋。我不是以英語爲母語的人。非常感謝。有人可以向我解釋這個程序嗎?

#include <iostream> 
using namespace std; 

int main() 
{ 
    char name[99]; 
    int counter=0; 

    cin >> name; 

    for(;name[counter]!='\0'; counter++) 
    {} 

    cout << "\nName: "; 

    for (;counter > 0; counter--) 
    { 
     cout << name[counter-1]; 
    } 
} 
+1

第一個循環:[C風格的字符串是空終止](https://en.wikipedia.org/wiki/Null-terminated_string),那麼循環後計數器的值是什麼? – user4581301

+0

計數器的值將等於'char'數組中元素的值 –

+2

這是一個非常新穎的想法。啓動您的調試器並逐步執行代碼,以確切地遵循它的功能。您不僅可以學習如何閱讀代碼及其含義,而且還可以練習使用調試器和解決問題的非常有用的技巧,以及在您沒有人員爲您提供教程時該怎麼做。 –

回答

0

C字符串爲空('\ 0')終止。第一個循環遞增counter,直到找到包含在name中的字符串的末尾。這由空字符表示。重要的部分是counter在第一個for循環之外被聲明,並且它在第二個循環執行時保持在作用域中,並且具有相同的值。然後第二個循環從name字符串的末尾開始,直到打印第一個字符。

+0

感謝您的解釋,但我仍然有一些問題: 1.爲什麼第一個for循環在比較部分包含一個數組'name [counter]'而不是'counter'? 2.爲什麼第二個循環在比較部分中不包含'='以及'>'符號,因爲數組的第一個元素位於第0個索引處,所以如果循環不包含' ='符號? –

+1

@KhubaibKhawar答案。 1.代碼正在尋找'name'中的空終止符('\ 0')。所以它必須檢查'name [counter]'。 2.使用'''是因爲'name'的索引是'counter-1'。如果'counter'爲0時執行的循環'name [-1]'將被打印,並且超出了數組的範圍。 –

+0

@KhubaibKhawar因爲它不知道'name'的長度,所以迭代直到它找到標記字符串結尾的'\ 0'。自然,這個相同的代碼可以被寫成無限不同的方式,其中一些可以事先知道其長度。 – Havenard

-1

你爲0

for(;name[counter]!='\0'; counter++){} 

for循環啓動計數器,直到達到「\ 0」。此時您計數器已經遞增到你鍵入的內容作爲字符數以上的遞增計數器名稱。例如:如果鍵入你好計數器是現在5.

for (;counter > 0; counter--){cout << name[counter-1]; }

在上述的for循環中,通過在5具有計數器值則您的陣列中的每個字符打印出在反向啓動,因爲第一次迭代的計數器是5,打印名稱[4],然後計數器遞減,因此您打印名稱[3] = 1,然後名稱[2] = 1, ,然後命名[1] = e,然後名稱[0] = h 。注意:如果您的計數器值爲n,您正在打印n-1。所以當你的計數器遞減到1時,你打印名字[0]。然後計數器最終遞減到0,其中循環變爲假。此外,您不是自己反轉陣列元素,而是反向打印它們。

-1

在您的程序中,First For循環是知道名稱變量中的字符數。 讓我來解釋它是如何工作的。
對於環具有基本結構等
爲(I = 10; I> 0;我 - )

第一部分I = 0是初始化,第二部分{
//機構爲
一部分}是條件,第三部分是遞增/遞減。
在您的程序中,我們已經將計數器的值初始化爲0.
此循環僅用於計算字符數,因此每個循環計數變量都將遞增。我們不需要在身體部分寫任何東西。

完成循環計數變量的第一個與名稱變量的字符具有相同的值。
再次在第二個循環中,我們不需要初始化計數值,因爲count已經存儲了一些值。

希望你現在明白了.. !!

-1
#include <iostream> 
using namespace std; 

int main() 
{ 
    char name[99]; 
    int counter=0; // variable to store the number of characters in name. 

    cin >> name; 

    // the for loop is counting each letter until the end of the string, storing the result in counter. 
    for(;name[counter]!='\0'; counter++) 
    {} 

    cout << "\nName: "; 

    // if the name you entered was "Billy" counter would = 5 
    for (;counter > 0; counter--) 
    { 
     // since counter = 5 counter subtracts 1 to get to the "5th" spot in the array which is when counter = 4 
     // name[0] = B 
     // name[1] = i 
     // name[2] = l 
     // name[3] = l 
     // name[4] = y 
     // now starting from position 4 in the array counter-- subtracts 1 
     // from counter each time it runs through the loop to get to each previous letter. 
     cout << name[counter-1]; 
    } 
} 
相關問題