" ch - ' a' "意思?

时间:2018-03-05 04:30:10

标签: java arrays

我正在阅读一段我无法理解的代码。考虑与我们的社区一起检查。

在下面的代码中,我无法理解行数[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']++;                     
   }

4 个答案:

答案 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 } 数组中的最后一个索引)