dポイントプレゼントキャンペーン実施中!

while文で単語を読み込んでtango[i](単語を格納している)に同じ単語があれば、配列hindo[i](単語の出現回数を格納)に1を加える。tango[i]に同じ単語がなければtango[i]に単語を追加。aはtango[i]の最後の値、keyは読み込み単語とし、単語の出現頻度を出したいのですが、うまくいきません。ソースとしては以下のものを考えました。

for(i = 0; i <= a ;i = i + 1){
if(key == tango[i]){
hindo[i] = hindo[i] + 1;
break;
}
if(key != tango[a]){
tango[a] = key;
a = a + 1;
}
}
どうすればうまくいきますか?
たびたびすいませんが、初心者なのでよろしくお願いします。

A 回答 (2件)

ごめんなさい、カテゴリは JavaScript でしたね…。

見落としてました。
ならば次のとおりでOKです。下に書いた(2)は読み飛ばしてください。

for(i = 0; i < a ; i = i + 1) {
 if (key == tango[i]) {
  hindo[i] = hindo[i] + 1;
  break;
 }
}
if (i >= a) {
 tango[a] = key;
 a = a + 1;
}
    • good
    • 0
この回答へのお礼

お礼が遅れすいませんでした。
迅速かつ丁寧な回答で、大変助かりました。
おかげ様でうまくいきました!
また質問をすることがあるかと思いますが、
その節はよろしくご教授願います。

お礼日時:2006/12/14 16:01

言語は C で良いのでしょうか?ならば、こんな感じです。



for(i = 0; i < a ; i = i + 1) {
 if (strcmp(key, tango[i]) == 0) {
  hindo[i] = hindo[i] + 1;
  break;
 }
}
if (i >= a) {
 tango[a] = key;
 a = a + 1;
}

ポイントは次のとおりです。
(1) for の中の条件は i <= a ではなく i < a です。C言語では、配列に a 個の要素がある場合、tango[0] ~ tango[a - 1]となるためです。
(2)key と tango[i] を「==」で比較してしまうと、ポインタを比較するだけで文字列の比較になりません。そこで、文字列の比較には strcmp 関数を用います。
(3)ループを a 回回っても一致する単語がなかった場合に、tango[a] に新しい単語を登録すれば良いので、単語を登録する部分はループの外に書き、if の条件は i >= a とします。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!