#ifndef __STRINGS_H
#define __STRINGS_H
#include <iostream.h>
class Strings {  
public:
  enum Directions {left, right, leftAndRight};
  Strings ();
  Strings (char);
  Strings (const char*);
  Strings (const Strings&);
  virtual ~Strings();
  virtual int            beginsWith (const char*) const;
  virtual int            contains (const char) const;
  virtual int            contains (const char*) const;
  virtual int            contains (const Strings&) const;
  virtual unsigned int   count (const char) const;
  virtual int            endsWith (const char*) const;
  virtual int            empty() const;
  virtual int            isAlphabetic() const;
  virtual int            isAlphanumeric() const;
  virtual int            isLowercase() const;
  virtual int            isNumeric() const;
  virtual int            isUppercase() const;
  virtual unsigned int   length() const;
  virtual Strings        lowercaseOf() const;
  virtual int            matches (const char*) const;
  virtual int            matches (const Strings&) const;
  virtual int            soundsLike (const char*) const;
  virtual int            soundsLike (const Strings&) const;
  virtual double         toDouble() const;
  virtual int            toInt() const;
  virtual long           toLong() const;
  virtual Strings        sliceOf (const char delimitor) const;
  virtual Strings        token() const;
  virtual Strings        token (const char delimitor) const;
  virtual Strings        uppercaseOf() const;
  virtual void append (char);
  virtual void append (const char*);
  virtual void append (const Strings&); 
  virtual void append (const int);
  virtual void clear();
  virtual void erase();
  virtual void lowercase();
  virtual void prepend (char);
  virtual void prepend (const char*);
  virtual void prepend (const Strings&);
  virtual void prepend (const int);
  virtual void remove (const char);
  virtual void replace (const char, const char);
  virtual void replace (const char, const char*);
  virtual void replace (const char, const Strings&);
  virtual void reverse();
  virtual void slice (unsigned int, const Directions = left);
  virtual void slice (Strings&, const char delimitor, int removeDelimitor = 0);
  virtual void sliceLeft (Strings&, unsigned int);
  virtual void sliceToken (const unsigned int = 1);
  virtual void sliceToken (const char delimitor, int removeDelimitor = 0);
  virtual void sliceToken (Strings& token);
  virtual void sliceToken (Strings& token, const char delimitor, int removeDelimitor = 0);
  virtual void swap (Strings&);
  virtual void trim (const Directions = leftAndRight);
  virtual void trim (const char, const Directions = leftAndRight);
  virtual void uppercase(); 
  operator const char*() const;
  friend ostream& operator << (ostream&, const Strings&);
  const Strings& operator = (char);
  const Strings& operator = (const char*);
  const Strings& operator = (const Strings&);
  friend Strings operator + (const Strings&, const Strings&);
  friend Strings operator + (const Strings&, const char*);
  friend Strings operator + (const char*, const Strings&);
  friend Strings operator + (const Strings&, const char);
  friend Strings operator + (const char, const Strings&);
  friend Strings operator + (const Strings&, const int);
  friend Strings operator + (const int, const Strings&);
  const Strings& operator += (char);
  const Strings& operator += (const char*);
  const Strings& operator += (const Strings&);
  const Strings& operator += (const int);
  int operator == (const Strings&) const;
  int operator == (const char*) const;
  int operator != (const Strings&) const;
  int operator != (const char*) const;
  int operator <  (const Strings&) const;
  int operator <  (const char*) const; 
  int operator >  (const Strings&) const;
  int operator >  (const char*) const;  
  int operator <= (const Strings&) const;
  int operator <= (const char*) const;  
  int operator >= (const Strings&) const; 
  int operator >= (const char*) const;
  const char& operator [] (const unsigned int) const;
protected:
  
  int     checkMatch (char*, char*) const;
  Strings soundexCodeOf (const char*) const;
  int     soundexNumericOf (const char) const;
  void    sliceLeft (unsigned int);
  void    sliceRight (unsigned int);
  void    trimLeft();
  void    trimRight();
  void    trimLeft (const char);
  void    trimRight (const char);
  char*   theString;
};
#endif
// Copyright (c) 1995-1997 D J Supel and ISX Corporation
// ABSTRACT:
// 
//   The String class provides basic string operations. 
//
// METHODS:
//   
// beginsWith (const char*): Returns true if the prefix of the String 
// exactly matches the client specified character string.
//
//   Example: beginsWith ("hello")       on "hello world"    returns 1;
//   Example: beginsWith ("hello")       on "  hello world"  returns 0;
//   Example: beginsWith ("hello world") on "hello world!!!" returns 1;
//
// isAlphabetic() returns true if all characters in the string are
// alphabetic characters or space characters. empty strings return 
// false.
//
// isAlphanumeric() returns true if all characters in the string are
// alphabetic, numeric, or space characters. empty strings return false.
//
// isLowercase() returns true if all characters in the string are
// lowercase characters or space characters. empty strings return 
// false.
//
// isUppercase() returns true if all characters in the string are
// uppercase characters or space characters. empty strings return 
// false.
//
// isNumeric() returns true if all characters in the string are numbers.
// if any spaces exist, false is returned. punctuation in strings 
// currently fail (eg. "24,888.34"). empty strings return false.
//
// matches (const char* pattern) and matches (const Strings& pattern)
// provide UNIX shell-like pattern matching for ?, [], and *.
//
//   Example: matches ("?b?") on "abc" returns 1.
//   Example: matches ("[abc]*") on "apple" returns 1.
//   Example: matches ("[abc]*") on "cat" returns 1.
//   Example: matches ("[abc]*") on "dog" returns 0.
//
// soundsLike (const char*) and soundsLike (const Strings&) returns
// true if the strings compare equally by 'sound', not 'spelling'.
// The method is based on the "soundex" algorithm so best results
// occur in word comparisions as opposed to sentence/phrases. The
// algorithm is 'English' based.
//
//   Example: soundsLike ("Beatles") on "beedles" returns 1.
//   Example: soundsLike ("Botany Bay") on "Botneebay" returns 1.
//   Example: soundsLike ("Rugby") on "rugbug" returns 0.
//
// sliceOf (const char) : Returns the sequence of characters up to
//   the delimitor. If the delimitor is not found, the original string 
//   is returned.
//
// token() : Returns the first non-space sequence of characters.
//
//   Example: token() on "  hello world!"  returns "hello"
//   Example: token() on "hello"           returns "hello"
//   Example: token() on "  hello   "      returns "hello"
//
// token (const char) : Returns the sequence of characters up to 
// the delimitor. If the delimitor is not found, the original string, 
// less any preceeding blank spaces, is returned.
//
//   Example: token (",") on "  hello world, how"  returns "hello world"
//   Example: token (",") on "hello world"         returns "hello world"
//   Example: token (",") on "   hello world,,, "  returns "hello world"
//
// remove (char): remove ALL occurences of the specified character.
//
//   Example: remove (',') on "12,000"     is set to "12000"
//   Example: remove (',') on "12,000,000" is set to "12000000" 
//
// replace (char old, char new): replace ALL occurences of the old
// character with the new character.
//
//   Example: replace (',', '_') on "12,000"     is set to "12_000"
//   Example: replace (',', '_') on "12,000,000" is set to "12_000_000" 
//
// slice (unsigned int, const Directions): cuts off the number of characters
// specified. The client can specify which side of the string the characters 
// are 'sliced' off.
//
//   Example: slice ((unsigned int)4) on "hello world" returns "o world"
//   Example: slice ((unsigned int)2, Strings::right) on "happy" returns "hap"
//
// sliceToken (unsigned int) : Removes the number of 'tokens' specified and  
// sets the string to the begining of the next token.
//
//   Example: sliceToken()  on "   hello world!"  is set to "world!"
//   Example: sliceToken()  on "   $ world!"      is set to "world!"
//   Example: sliceToken()  on "good-day world!"  is set to "world!"
//   Example: sliceToken(2) on "good day world!"  is set to "world!"
//
// sliceToken (const char, int) : Removes the sequence of characters up 
// to the delimitor, including delimitor if int value is true. If the 
// delimitor is not found, the string is altered by removal of any 
// preceeding blank spaces only.
//
//   Example: sliceToken(",") on    "  hello world, how"   is set to ", how"
//   Example: sliceToken(",", 1) on " hello world, how"    is set to "how"
//   Example: sliceToken(",", 1) on " hello world,,, how"  is set to ",,how"
//
// sliceToken (Strings&) and sliceToken (Strings&, const char, int): Perform
// the same operations as the similar sliceToken methods above except the
// sliced off token is returned to the user. This sliced off token will
// have no white-space to its left or right.
//
// trim(): Removes ALL occurences of white-space. The client can specify 
// from which direction trimming takes place.
//
//   Example: trim()                 on " xyz "  is set to "xyz"
//   Example: trim (Strings::left)   on " xyz "  is set to "xyz "
//   Example: trim (Strings::right)  on " xyz "  is set to " xyz"
//
// trim (const char, const Directions): Removes ALL occurences of the
// specified character. The client can specify from which direction 
// trimming of this character takes place.
//
// EXCEPTIONS:
//
//   None.
//
// EXAMPLES:
//
//   See METHODS.
// 
// LIMITATIONS:
//
//   None.
//
// NOTES:
//  
//   None.
//
syntax highlighted by Code2HTML, v. 0.9.1