2017-09-13 209 views
1

我是C++新手。嘗試一個簡單的問題:每次循環輸出一個字符數組少一個字符

創建一個while循環,其輸出與每次循環,直到它僅保持在其內「\ 0」值時間少一個字符 字符數組。

答案是:

char s[] = "Hello World"; 
while (strlen(s)) 
{ 
    s[strlen(s) - 1] = '\0'; 
    cout << s << endl; 
} 

但是我使用的strlen下沒有。 特別是這個零件:s[strlen(s) - 1] = '\0'; 有人可以解釋這部分是什麼意思?

最後還有另一種解決這個問題的方法嗎?

+0

's [strlen(s) - 1] ='\ 0';'將終止的c-string字符設置爲之前的一個較小的位置。 – user0042

+2

[你知道strlen是做什麼的嗎?](http://en.cppreference.com/w/cpp/string/byte/strlen) – Simple

+0

他你查了什麼'strlen'呢? – Carcigenicate

回答

0

正如有人已經回答,s[strlen(s) - 1] = '\0';這是一種縮短字符串向後移動空字符('\ 0')的字符串的方法。

如你問另一種方式做同樣的事情,這裏有兩個例子:

試圖避免雙重呼叫曾經環路的strlen:

char p[] = "Hello World"; 
    char* pEnd = &p[strlen(p)]; 
    while (p!=pEnd) 
    { 
     *--pEnd = '\0'; 
     cout << p << endl; 
    } 

更先進的方法保持主線您與您的例子得出:

std::string str("Hello World"); 
while(str.length() > 0) { 
    str.pop_back(); 
    cout << str << endl; 
} 

(第2解決方案更新感謝@simple貢獻)

+0

非常感謝! 關於第一個解決方案的一些問題: 我不明白'while(p!= pEnd)',它表示p不等於'pEnd',但是這將是錯誤的,那麼循環將不會執行。糾正我,如果我錯了。 和第二種解決方案: 通過使用字符串,它不會包含'\ 0'? – engkhsky

+0

'str.resize(str.length() - 1);'''str.pop_back();' – Simple

+0

@Simple,謝謝我學到了另一種解決它的新方法。 – engkhsky

0

strlen獲取字符串的長度。

http://www.cplusplus.com/reference/cstring/strlen/

「\ 0」是一個空終止符

https://en.wikipedia.org/wiki/Null-terminated_string

所以基本上你要通過你的字符串,使之,使之與空一個字符前面每次終止

+0

有幾個代碼來顯示字符串或字符的長度是否正確? 如'str.size'和'str.length' ,我看到'size_t',我不明白它是如何工作的。 – engkhsky

+0

所以str.length()適用於strings.http://www.cplusplus.com/reference/string/string/length/。和str.size()適用於數組http://www.cplusplus.com/reference/array/array/size/ – Legman

+0

,這裏是size_t的參考。我不使用那麼多http://en.cppreference.com/w/cpp/types/size_t – Legman

1

c字符串有一個空終止符(即\0)所以在你的情況下你的字符串實際上是:

H e l l o W o r l d \0 

strlen數字符規格妥當第一空終結(\0)數量,以便您最初的長度是11每次運行while循環,你進軍空字符後面一個這樣:

H e l l o W o r l \0 \0 
H e l l o W o r \0 \0 \0 
H e l l o W o \0 \0 \0 \0 

其實質上減小了strlen的大小。

同樣cout打印到第一個空終止符(\0)。

另一個要注意的是strlen返回的字符個數然而一個C-string是基於0這就是爲什麼-1s[strlen(s) - 1] = '\0';(以點到C-string中的最後一個字符)。

+0

謝謝你解釋! for's [strlen(s) - 1] ='\ 0';''[]'中的內容是數組右邊的索引? – engkhsky

相關問題