for (int i = 0; i < s.length(); i++)
{
if (isdigit(s[i]))
counts[s[i] - '0'] ++;
}
這段代碼的含義是什麼,任何人都可以解釋這段代碼「counts [s [i] - '0'] ++;」精確操作C++編程代碼計數[s [i] - '0'] ++;
for (int i = 0; i < s.length(); i++)
{
if (isdigit(s[i]))
counts[s[i] - '0'] ++;
}
這段代碼的含義是什麼,任何人都可以解釋這段代碼「counts [s [i] - '0'] ++;」精確操作C++編程代碼計數[s [i] - '0'] ++;
counts
是一個十元素數組,用於計算每個數字在s
中出現的次數。
具體來說:
s[i] - '0'
變成'0'
成0
,'1'
成1
等counts[...]++
遞增陣列的對應元件。該代碼計算一個數字(1-9)
出現在字符串s
中出現的次數。
注意。 'i' - '0'
與i - 0
相同,如果i
是digit
。 原因是字符'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)的 '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]中找到特定數字的次數。
's [i] - '0''的美妙之處在於它即使在字符編碼不是ASCII的情況下也能正常工作。在我的IBM大型機上,「0」的代碼是240,但代碼仍然有效! – 2013-04-09 07:28:18
是的沒錯,代碼是可移植的。我只是選擇了Ascii圖表作爲例子。 – Arun 2013-04-09 07:34:50
counts
是一個數組。
s[i]
是一個包含ASCII碼的字符。'0'
,'1'
, '2'
,...
s[i] - '0'
將其轉換爲整數。 1
,2
,3
,...
上面的數字表示的第n個項的數組中的索引 - >X
counts[X] ++
遞增一個陣列的第X個項目。
計算數組中每個數字'0-9'的數量。 – lapk 2013-04-09 07:09:34