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

这段代码是什么意思,任何人都可以解释这段代码“counts[s[i] - '0'] ++;” 精确操作

4

4 回答 4

5

counts是一个十元素数组,用于计算每个数字在 中出现的次数s

具体来说:

  • s[i] - '0'变成,变成等'0'_0'1'1
  • counts[...]++递增数组的相应元素。
于 2013-04-09T07:08:54.053 回答
1

该代码正在计算一个数字(1-9)在 string 中出现的次数s

笔记。与if'i' - '0'相同。原因是字符具有连续的 ASCII 值。所以和之间的 ASCII 值的差异是; i - 0idigit'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

于 2013-04-09T07:08:57.507 回答
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) counts[s[i]-'0']++ 将计算在 s[i] 中找到特定数字的次数。

于 2013-04-09T07:14:15.500 回答
1
  • counts是一个数组。

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

  • s[i] - '0'将它们转换为整数。1, 2, 3, ...

  • 上面的数字表示数组中第 n 项的索引 -->X

  • counts[X] ++将数组的第 X 项加一。

于 2013-04-09T07:15:22.070 回答