我正在阅读一段我无法理解的代码。考虑与我们的社区一起检查。
在下面的代码中,我无法理解行数[ch - ' a'] ++的作用。或者我们如何在java 7中编写相同的内容。解释说的是我们有一个String和一个int数组。我们遍历字符串s并计算s中字符出现的次数,并将count的频率放入数组中。请帮忙!!
String s = "test";
int[] count = new int[26];
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
count[ch-'a']++;
}
答案 0 :(得分:4)
您正在迭代一个整数count
数组并在索引ch-'a'
处递增整数值,这会产生一个整数值,例如count['a'-'a'] == count[0]
来标记该字符存在于字符串。
在ch - 'a'
中减去,因为字母字符的整数值不是从0开始。
答案 1 :(得分:3)
代码试图计算每个字符的出现次数。
并将其分配为
a occupies position 0
b occupies position 1
etc etc
要获得位置0,您需要拨打&#39; a&#39; - &#39; a&#39;
获得位置1,你需要打电话给&#39; b&#39; - &#39; a&#39;
所以&#34;计数[ch - &#39; a&#39;] ++;&#34;
是等效的int position = ch -'a'; // get position
count[position] = count [position] + 1; // increment the count in that particular position
答案 2 :(得分:2)
这意味着将两个字符视为整数并从另一个中减去一个字符。例如,
'b' - 'a' == 1
在您发布的代码中,它将所有小写字符计数到数组数据结构中。换句话说,如果String中有许多小写的'a',count [0]将非常大,如果许多lowecase'b等等,count [1]会很大。
答案 3 :(得分:0)
count[]
用于存储String
作为参数传递的每个字母的出现次数(在count[0]
,将存储&#39; a
&的出现次数#39;,在count[1]
b
&#39;,... count[25]
出现&{39; z
&#的时间char ch = s.charAt(i);
39。)
现在在以下行中:
i = 0
您存储来自给定String的当前已检查字符。 (t
时,{&#39; char
&#39;)。请注意,每个int
都可以显示为char
(它是 ASCII 代码)。要查看与每个t
对应的所有数值的列表,您可以在Internet中搜索ASCII表(例如here,在列#34; Dec&#34;)。因此对于count[ch-'a']++;
&#39;这是116。
说:
count[116 - 97]++
您的意思是count[19]++
,它是a
。通过&#39; char ch
&#39;减去正在减去97,它可以帮助您快速找到存储当前已检查a
的实例的数组中的索引。看,&#39; count['a' - 'a']
&#39;它将是count[0]
(count
- z
数组中的第一个索引),用于&#39; count[122 - 97]
&#39; count[25]
(count
- return_type function_name( parameter list ) {
body of the function
}
数组中的最后一个索引)