0

我必须读取字符串"hello world"并仅使用 for 循环输出每个字母的频率。讲师暗示我需要使用两个循环,并给了我们以下代码开始:

int ch, count;
for (ch ='a'; ch <='z'; ch++) {
  //count the number of occurrences in a line
  //Print the count>0
}

编辑:我想我会解决这个问题并发布我在一年前找到的解决方案,因为这个问题已经获得了相当多的点击量。

int count;
int value;
for (int i=65; i<91; i++) {
    count=0;
    for (int j=0; j<S.length; j++) {
        value=(int)S[j];
        if (value == i) {
             count++;
        }
    }
    if (count>0) 
       System.out.println((char)i+" -- "+count);
}
4

4 回答 4

5

在第二个 for 循环中,只需遍历字符串的每个字符并将其与第一个 for 循环的当前字符进行比较。

(不是我会做的解决方案,只是按照你的教练提示)

另一种方法是将值存储在地图中,其中字符作为键,出现次数作为值。

HashMap<Character,Integer> map = new HashMap<>();

for (int ii=0; ii<string.length; ii++) {
   char c = string.charAt(ii);
   if (map.containsKey(c)) {
      map.put(c, get(c)++);
   } else {
      map.put(c, 1);
   }
}

更新:

//iterating on the map to output values:
for (char key : map.keySet()) {
   System.out.println(key+": "+map.get(key));
}
于 2013-03-20T19:27:38.190 回答
1

我会使用一个简单的数组。只需将每个字母转换为索引并在该索引处递增数组。

int letters[26];
int index = ch - 'a';
letters[index]++;
于 2013-03-20T19:37:49.037 回答
1

以 sdasdadas 的评论和 Jean 的各自回答为基础:

外部 for 循环将遍历字母表中的每个字符,保持一个计数(每次执行外部循环时都需要重置。)内部循环循环通过“hello world”字符串,如果字符充当找到外部 for 循环的当前参数。

更新 我不能在安德烈的回答下面发表评论,但我可以提供一些伪代码来解决我认为你在关于计数器的评论中的意思。

int i;
for (ch characterOuter : alphabet){ //for each character in the alphabet
    i = 0 //i starts at zero, and returns to zero for each iteration  <-----THIS
    for (ch characterInner : "hello world"){
        if (characterOuter == characterInner){
            i++; //increase i by 1 <-----AND THIS
        }//end if
    }//end  innerfor
    if (i > 0) {
        print(characterOuter + " -- " + i);
    } //end if;   <---------------- this if statement was missing
}//end outer for

另外,请参阅这个问题

于 2013-03-20T19:41:09.360 回答
0
int count;
int value;
   for (int i=65; i<91; i++) {
      count=0;
      for (int j=0; j<S.length; j++) {
      value=(int)S[j];
      if (value == i) {
         count++;
      }
   }
   if (count>0) 
      System.out.println((char)i+" -- "+count);
}
于 2013-10-28T03:14:50.697 回答