【问题标题】:What exactly does ++array[s.charAt(i) - 'A'] do?++array[s.charAt(i) - 'A'] 到底是做什么的?
【发布时间】:2011-12-28 11:04:58
【问题描述】:
for (int i = 0; i < s.length(); ++i) 
    {
        if (s.charAt(i) >= 'A' && s.charAt(i) <= 'Z') 
        {
            ++array[s.charAt(i) - 'A'];
        }
    }

我了解 For 循环。 s.length() 是 26,确切地说是 int[26]。所以这个循环会发生26次,0-25。如果 i 处的 Char, 0-25 介于 AZ 之间或者是 AZ 它将继续到 ++array[s.charAt(i) - 'A']; 从我看到的情况来看,它在每个循环中添加一次数组,或者在每个循环中添加一次数组的值,对于 char i 处的字符串第一个是 0 秒是 2,因为数组从 0 开始。所以在 i -'A' 的位置添加一个数组是我感到困惑的地方。

【问题讨论】:

    标签: java arrays string char


    【解决方案1】:

    count[str.charAt(i)]++ 实际存储的是什么? [复制] 对于那些有相同相关问题的人来说,这里就是答案

    第一

    static final int chars=256; static char count[]=new char[chars];

    当我们把这段代码改成图片后就变成了这样

    0 1 2 3 4 5 6 7 8 9 .. .. .. .. .. .. .. .. .. 97 .. 255

    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

    第二

    count[str.charAt(i)]++;

    假设你有 str = “abc” 那么 str.charAt(0) 将是“a” 那么 count['a'] 表示 count[97] 为什么?因为java自动将‘a’转换成ASCII码数字97; 然后 count[97] 的值是 0,当你像这样 count[97]++ 递增它时,它会变成 1

    0 1 2 3 4 5 6 7 8 9 .. .. .. .. .. .. .. .. .. 97 .. 255

    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0

    如果你像 count[97]++ 一样再次增加它,那么它会变成 2。

    0 1 2 3 4 5 6 7 8 9 .. .. .. .. .. .. .. .. .. 97 .. 255

    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0

    这就是背后的全部秘密。我不描述其余的,因为我认为你的问题得到了回答。 如果您想测试我所说的是否正确,请使用此简单代码进行检查

    public static void main(String[] argv) {

     int[] count = new int[255]; 
        count['a']++;
        System.out.println(count['a']);
        int counter=0;
        for(int i=0;i<count.length;i++) {
            System.out.println(counter++ + " " + count[i]);
        }
    

    }

    【讨论】:

      【解决方案2】:
      ++array[s.charAt(i) - 'A'];
      

      计算给定字符串 s 中每个字符的频率,并将每个字符的频率存储在数组中的特定索引处。

      【讨论】:

        【解决方案3】:

        语句++array[s.charAt(i) - 'A']; 正在递增由s.charAt(i) - 'A' 索引的数组中的值。

        这个循环的作用是计算s中每个字母出现的次数。

        - 'A' 的原因是它“移动”了 ascii/unicode 值,使A - Z 的值在 0 - 25 之间。因此更适合作为数组索引。

        【讨论】:

          【解决方案4】:

          计算字符数

          (count chars 不是历史数字)

          【讨论】:

            【解决方案5】:

            array 似乎是“每个大写字母的计数器”。通过从字符串中的任意字符中减去字符'A',可以得到该字母在数组中的索引:

            'A' - 'A' == 0
            'B' - 'A' == 1
            'C' - 'A' == 2
            

            要理解这一点,您应该理解,Java 将char 与(无符号)short 视为相同。因此,您可以使用char 进行计算

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-07-26
              • 2016-04-27
              • 2015-08-06
              • 2013-09-02
              • 2014-01-02
              • 2013-10-10
              • 2017-05-08
              • 2022-01-20
              相关资源
              最近更新 更多