“ch - 'a'”是什么意思? [重复]

问题描述 投票:0回答:4

这个问题在这里已有答案:

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

在下面的代码中,我无法理解行计数[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']++;                     
   }
java arrays
4个回答
4
投票

您正在迭代一个整数count数组并在索引ch-'a'处递增整数值,这会产生一个整数值,例如count['a'-'a'] == count[0]来标记该字符存在于字符串中。

你在ch - 'a'中减去因为字母字符的整数值不是从0开始。


3
投票

代码试图计算每个字符的出现次数。

并且它分配它

a occupies position 0
b occupies position 1
etc etc

要获得位置0,你需要调用'a' - 'a' 获得位置1,你需要调用'b' - 'a'

那么“count [ch-'a'] ++中发生了什么;”相当于

int position = ch -'a'; // get position
count[position] = count [position] + 1; // increment the count in that particular position

2
投票

它意味着将两个字符视为整数并从另一个中减去一个。例如,

'b' - 'a' == 1

在您发布的代码中,它将所有小写字符计数到数组数据结构中。换句话说,如果String中有许多小写的'a',则count [0]将非常大,如果许多lowecase'b等,count [1]将会很大,等等。


0
投票

count[]在这里存储来自String的每个字母的出现作为参数传递(在count[0]将存储'a'的出现次数,在count[1]出现'b'的数量,...在count[25]出现的'z') 。

现在在以下行中:

char ch = s.charAt(i); 

您存储来自给定String的当前已检查字符。 (当i = 0,它是't')。请记住,每个char都可以表示为int(它是ASCII码)。要查看与每个char对应的所有数值的列表,可以在Internet中搜索ASCII表(例如,here,在“Dec”列)。所以't'是116。

说:

count[ch-'a']++;

你的意思是count[116 - 97]++,它是count[19]++。通过'a'减去减去97,它可以帮助您快速找到数组中的索引,在该数组中存储当前已检查的char ch。看看,对于'a',它将是count['a' - 'a']count[0] - count数组中的第一个索引),'z'count[122 - 97]count[25] - count数组中的最后一个索引)

© www.soinside.com 2019 - 2024. All rights reserved.