0

2つの質問があります

最初: コードを実行しようとすると、「配列インデックス 4001 が配列の末尾 (4001 要素を含む) を超えています」という警告が表示されます。

2番目:ファイルから単語を読み取り、関数に渡したいので、単語をハッシュテーブルに追加し、それに応じてインデックスを付け、テキストファイルから一意の単語の数を出力できます。サイズ関数がそれを行います。誰かがこれで私を助けてくれますか

#include <iostream>
#include <string>
#include <fstream>

#define HASHSIZE 4001

using namespace std;

class entry {
 public:
  string word;

  int frequency;

  entry() { frequency = 0; }
};

class Hashtable {
 private:
  entry entryArr[HASHSIZE];

  int updateArr[HASHSIZE];

  int costArr[HASHSIZE];

  int sizeUnique = 0;

  int probeCount;

  int updateCount;

 public:
  int HashKey(string key)

  {
    int totalsum = 0;

    // this function is to assign every word a key value to be stored against.

    for (int i = 0; i < key.length(); i++) totalsum += int(key[i]);

    return (totalsum % HASHSIZE);
  }

  void update(string key) {
    int k = HashKey(key);

    if (entryArr[k].frequency == 0) {
      entryArr[k].frequency++;
      updateCount++;
      probeCount++;
      sizeUnique++;
    }
    // function to enter the unique words in the array
    else if (entryArr[k].word == key) {
      entryArr[k].frequency++;
      probeCount++;
    }

    while (entryArr[k].frequency != 0 && entryArr[k].word != key) {
      k++;
    }
    if (entryArr[k].word == key) {
      entryArr[k].frequency++;
    } else {
      entryArr[k].word = key;
    }
    sizeUnique++;
    updateCount++;
    probeCount++;
  }

  int probes() {
    costArr[HASHSIZE] = probeCount;
    return probeCount;
  }

  int size()  // function to count the total number of unique words occuring
  {
    int count = 0;
    updateArr[HASHSIZE] = updateCount;
    for (int i = 0; i < HASHSIZE; i++)
      if (updateArr[HASHSIZE] != 0) {
        count = costArr[i] / updateArr[i];
      }
    cout << count;
    return count;
  }
};

int main() {
  entry e;
  Hashtable h;

  ifstream thisfile("RomeoAndJuliet.txt");

  if (thisfile.is_open()) {
    while (!thisfile.eof) {
      h.update(e.word);
    }

    thisfile.close();
    cout << "The total number of unique words are: " << h.size();
  }

  return 0;
}
4

2 に答える 2