for (int i = 0; i < s.length(); i++)
{
if (isdigit(s[i]))
counts[s[i] - '0'] ++;
}
这段代码是什么意思,任何人都可以解释这段代码“counts[s[i] - '0'] ++;” 精确操作
for (int i = 0; i < s.length(); i++)
{
if (isdigit(s[i]))
counts[s[i] - '0'] ++;
}
这段代码是什么意思,任何人都可以解释这段代码“counts[s[i] - '0'] ++;” 精确操作
counts
是一个十元素数组,用于计算每个数字在 中出现的次数s
。
具体来说:
s[i] - '0'
变成,变成等'0'
_0
'1'
1
counts[...]++
递增数组的相应元素。该代码正在计算一个数字(1-9)
在 string 中出现的次数s
。
笔记。与if'i' - '0'
相同。原因是字符具有连续的 ASCII 值。所以和之间的 ASCII 值的差异是; i - 0
i
digit
'0' -'9'
'i'
'0'
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]
多少个 s。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) counts[s[i]-'0']++ 将计算在 s[i] 中找到特定数字的次数。
counts
是一个数组。
s[i]
是一个包含 ASCII 数字的字符。'0'
, '1'
,
'2'
, ...
s[i] - '0'
将它们转换为整数。1
, 2
, 3
, ...
上面的数字表示数组中第 n 项的索引 -->X
counts[X] ++
将数组的第 X 项加一。