0

文字列を読み取り、"hello world"forループのみを使用して各文字の頻度を出力する必要があります。インストラクターは、2つのループを使用する必要があることをほのめかし、開始するために次のコードを提供しました。

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

編集:この質問はかなりのヒット数を獲得しているという事実のために、私はこの質問をネクロして、1年前に見つけた解決策を投稿すると思いました。

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

2 番目の for ループでは、string の各文字を調べて、最初の for ループの現在の文字と比較します。

(インストラクターのヒントに従うだけで、私が行う解決策ではありません)

もう 1 つの方法は、文字をキーとして、出現回数のカウンターを値として、マップ内に値を格納することです。

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

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 に答える
1

単純な配列を使用します。各文字をインデックスに変換し、そのインデックスで配列をインクリメントするだけです。

int letters[26];
int index = ch - 'a';
letters[index]++;
于 2013-03-20T19:37:49.037 に答える
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 に答える