home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / magazine / pctchnqs / 1991 / number6 / bitvect / sets.cpp < prev   
Text File  |  1991-11-18  |  2KB  |  89 lines

  1. // Listing 3: sets.cpp
  2. // Test program for BitVect (bit vector) class.
  3. // Copyright (C) 1991 by Nicholas Wilt.
  4.  
  5. #include <iostream.h>
  6. #include <stdlib.h>
  7. #include <alloc.h>
  8.  
  9. #include "bitvect.h"
  10.  
  11. // This program uses bit vectors to implement sets of characters.
  12. // The CapitalLetters function returns a 256-element bit vector
  13. // with the bits corresponding to capital letters set.
  14. // LowercaseLetters returns a 256-element bit vector with the bits
  15. // corresponding to lowercase letters set.
  16.  
  17. BitVect CapitalLetters()
  18. {
  19.   BitVect ret(256, 0);
  20.   ret.SetRange((long) 'A', (long) 'Z', 1);
  21.   return ret;
  22. }
  23.  
  24. BitVect LowercaseLetters()
  25. {
  26.   BitVect ret(256, 0);
  27.   ret.SetRange((long) 'a', (long) 'z', 1);
  28.   return ret;
  29. }
  30.  
  31. BitVect Vowels()
  32. {
  33.   BitVect ret(256, 0);
  34.   ret.SetBit((long) 'a', 1);    ret.SetBit((long) 'A', 1);
  35.   ret.SetBit((long) 'e', 1);    ret.SetBit((long) 'E', 1);
  36.   ret.SetBit((long) 'i', 1);    ret.SetBit((long) 'I', 1);
  37.   ret.SetBit((long) 'o', 1);    ret.SetBit((long) 'O', 1);
  38.   ret.SetBit((long) 'u', 1);    ret.SetBit((long) 'U', 1);
  39.   return ret;
  40. }
  41.  
  42. // Given a string and a bit vector, prints out only
  43. // only the characters in the string that are members
  44. // of the set described by the bit vector.
  45. void
  46. PrintString(unsigned char *s, BitVect& x)
  47. {
  48.   while (*s) {
  49.     if (x[*s])
  50.       cout << *s;
  51.     s++;
  52.   }
  53.   cout << '\n';
  54. }
  55.  
  56. int main()
  57. {
  58.   char *StringToLookAt = "([StringToLookAt])";
  59.  
  60.   BitVect iscapital = CapitalLetters();
  61.   BitVect islowercase = LowercaseLetters();
  62.   BitVect iseither = iscapital | islowercase;
  63.   BitVect isneither = ~iseither;
  64.   BitVect isvowel = Vowels();
  65.   BitVect isconsonant = iseither - isvowel;
  66.  
  67.   cout << "String to look at: " << StringToLookAt << '\n';
  68.  
  69.   cout << "Capitals only: ";
  70.   PrintString((unsigned char *) StringToLookAt, iscapital);
  71.  
  72.   cout << "Lowercase only: ";
  73.   PrintString((unsigned char *) StringToLookAt, islowercase);
  74.  
  75.   cout << "Capitals or lowercase: ";
  76.   PrintString((unsigned char *) StringToLookAt, iseither);
  77.  
  78.   cout << "Neither capitals nor lowercase: ";
  79.   PrintString((unsigned char *) StringToLookAt, isneither);
  80.  
  81.   cout << "Vowels only: ";
  82.   PrintString((unsigned char *) StringToLookAt, isvowel);
  83.  
  84.   cout << "Consonants only: ";
  85.   PrintString((unsigned char *) StringToLookAt, isconsonant);
  86.  
  87.   return 0;
  88. }
  89.