2013-04-09 147 views
1
for (int i = 0; i < s.length(); i++) 
{ 
    if (isdigit(s[i])) 
    counts[s[i] - '0'] ++; 
} 

這段代碼的含義是什麼,任何人都可以解釋這段代碼「counts [s [i] - '0'] ++;」精確操作C++編程代碼計數[s [i] - '0'] ++;

+0

計算數組中每個數字'0-9'的數量。 – lapk 2013-04-09 07:09:34

回答

5

counts是一個十元素數組,用於計算每個數字在s中出現的次數。

具體來說:

  • s[i] - '0'變成'0'0'1'1
  • counts[...]++遞增陣列的對應元件。
1

該代碼計算一個數字(1-9)出現在字符串s中出現的次數。

注意。 'i' - '0'i - 0相同,如果idigit。 原因是字符'0' -'9'具有連續的ASCII值。因此,'i''0'之間的ASCII值差異爲i;

現在讓我們說

string s = "1b21cc55"; 

int count[10] is all zeros 
在循環

我們檢查s[i]

s[0] = 1 ---> isdigit(1) = yes ----> count[1-0] += 1 ---> count[1] is 1;  
s[1] = b ---> isdigit(b) = no ; 
s[2] = 2 ---> isdigit(2) = yes ----> count[2-0] += 1; ---> count[2] is 1;   
s[3] = 1 ---> isdigit(1) = yes ----> count[1-0] += 1; ---> count[1] is 2; 

等等...

最後count[i]會告訴你有多少個i在字符串中。

1

希望這會有所幫助。

1)的 '0' 的ASCII值48

2)每當S [i]爲一個數字(0-9之間含)

3)S [I] - '0' 求值到一個索引(在0..9之間);

實施例: '1' ASCII值是49 說S [i]爲 '1' 則s [I] - '0' 是49-48 = 1

4)計數[秒[i] - '0'] ++會計算在s [i]中找到特定數字的次數。

+0

's [i] - '0''的美妙之處在於它即使在字符編碼不是ASCII的情況下也能正常工作。在我的IBM大型機上,「0」的代碼是240,但代碼仍然有效! – 2013-04-09 07:28:18

+0

是的沒錯,代碼是可移植的。我只是選擇了Ascii圖表作爲例子。 – Arun 2013-04-09 07:34:50

1
  • counts是一個數組。

  • s[i]是一個包含ASCII碼的字符。'0''1''2',...

  • s[i] - '0'將其轉換爲整數。 123,...

  • 上面的數字表示的第n個項的數組中的索引 - >X

  • counts[X] ++遞增一個陣列的第X個項目。