Listing 4: Sorting Word objects


// Listing 4: test2.cpp
#include <string.h>
#include <stdlib.h>
#include <iostream.h>
#include <iomanip.h>
#include "qsortT.h"

// simple class to hold a word
class Word
{
public:
  Word(const char *val = 0)
  {
    if (val)
    {
      strncpy(buf, val, bufLen);
      buf[bufLen-1] = '\0';
    }
    else
      buf[0] = '\0';
  }
  // conversion to C string for printing
  operator const char *() const
  { return buf; }

  // comparison operators for sorting
  int operator==(const Word &word) const
  { return (strcmp(buf, word.buf) == 0); }
  int operator<(const Word &word) const
  { return (strcmp(buf, word.buf) < 0); }
private:
  enum { bufLen = 40 };
  char buf[bufLen];
};

int main()
{
  const int maxWords = 100;
  int nWords = 0;
  Word **wArry = new Word* [maxWords];
  char tmp[40];

  while (cin >> setw(sizeof(tmp)) >> tmp)
  {
    wArry[nWords++] = new Word(tmp);
    if (nWords >= maxWords)
      break;
  }

  // sort and print results
  qsortPT(wArry, nWords);
  for (int i = 0; i < nWords; i++)
  {
    cout << *(wArry[i]) << endl;
    delete wArry[i];
  }
  delete []wArry;
  return 0;
}

// End of Listing 4