ページ 11

単語を数えるプログラムについて

Posted: 2013年1月27日(日) 22:59
by Asin
単語をカウントするプログラムについてです。

ファイルから単語を二次元配列に取り込み、その単語が何個あるかをカウントしたいのですがうまくいきません・・・

word1という二次元配列にファイルから単語を全部取り込み、
word2という二次元配列に重複する単語は重複しないように文字列を格納して、
それぞれの単語が何個あるかをカウントしようとしているのですが、うまくいけません・・・

コード:

total = 0;
for (i = 0; i < t_word1; i++) {
  sscanf(word1[i], "%s", word2[total]);
  flag = -1;

  for (j = 0; j < total; j++) {
    if (strcmp(word1[j], word2[total]) == 0) {
      flag = j;
    }
  }

  if (flag < 0) { /* 重複が無いとき、新しい単語を登録 */
   sscanf(word1[i], "%s", word2[total]);
   word_count[total++] = 1;
  }
  else {
    word_count[flag]++;
  }
}

上記はカウント部分のつもりで書いたのですが・・・
重複した単語までword2に格納してしまっているし、カウント自体もうまくできていません・・・

どうかご助力お願いします!

Re: 単語を数えるプログラムについて

Posted: 2013年1月27日(日) 23:02
by みけCAT

コード:

if (strcmp(word1[j], word2[total]) == 0) {
この部分で、最初がword1ではなくword2であるべきではないでしょうか?

Re: 単語を数えるプログラムについて

Posted: 2013年1月28日(月) 08:36
by Asin
ご指摘のあったところを修正しました

word1の数が少ないとうまくいくのですが、膨大な数となると
セグメンテーション違反です (コアダンプ)
となってしまいます・・・


解決方法はないでしょうか?

Re: 単語を数えるプログラムについて

Posted: 2013年1月28日(月) 08:43
by Asin
すいません
word2の2次元配列の数が足りないだけでした・・・

お騒がせしました
ありがとうございました!