1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
|
// Alexandrea Washington, CS 202, Assignment 8
// File: obstring.h
// CLASS PROVIDED: obstring
// This is a simple version of the Standard Library obstring.
// It is part of the namespace main_savitch_4, from the textbook
// "Data Structures and Other Objects Using C++"
// by Michal Main and Walter Savitch
//
// CONSTRUCTOR for the obstring class:
// obstring(const char str[ ] = "") -- default argument is the empty string.
// Precondition: str is an ordinary null-terminated string.
// Postcondition: The string contains the sequence of chars from str.
//
// CONSTANT MEMBER FUNCTIONS for the obstring class:
// size_t length( ) const
// Postcondition: The return value is the number of characters in the
// string.
//
// char operator [ ](size_t position) const
// Precondition: position < length( ).
// Postcondition: The value returned is the character at the specified
// position of the string. A string's positions start from 0 at the start
// of the sequence and go up to length( )-1 at the right end.
//
// MODIFICATION MEMBER FUNCTIONS for the obstring class:
// void operator +=(const obstring& addend)
// Postcondition: addend has been catenated to the end of the string.
//
// void operator +=(const char addend[ ])
// Precondition: addend is an ordinary null-terminated string.
// Postcondition: addend has been catenated to the end of the string.
//
// void operator +=(char addend)
// Postcondition: The single character addend has been catenated to the
// end of the string.
//
// void reserve(size_t n)
// Postcondition: All functions will now work efficiently (without
// allocating new memory) until n characters are in the string.
//
// NON-MEMBER FUNCTIONS for the obstring class:
// obstring operator +(const obstring& s1, const obstring& s2)
// Postcondition: The string returned is the catenation of s1 and s2.
//
// istream& operator >>(istream& ins, obstring& target)
// Postcondition: A string has been read from the istream ins, and the
// istream ins is then returned by the function. The reading operation
// skips white space (i.e., blanks, newlines, tabs) at the start of ins.
// Then the string is read up to the next white space or the end of the
// file. The white space character that terminates the string has not
// been read.
//
// ostream& operator <<(ostream& outs, const obstring& source)
// Postcondition: The sequence of characters in source has been written
// to outs. The return value is the ostream outs.
//
// void getline(istream& ins, obstring& target, char delimiter)
// Postcondition: A string has been read from the istream ins. The reading
// operation starts by skipping any white space, then reading all characters
// (including white space) until the delimiter is read and discarded (but
// not added to the end of the string). The return value is ins.
//
// VALUE SEMANTICS for the obstring class:
// Assignments and the copy constructor may be used with obstring objects.
//
// TOTAL ORDER SEMANTICS for the obstring class:
// The six comparison operators (==, !=, >=, <=, >, and <) are implemented
// for the obstring class, forming a total order semantics, using the usual
// lexicographic order on strings.
//
// DYNAMIC MEMORY usage by the obstring class:
// If there is insufficient dynamic memory then the following functions call
// new_handler: The constructors, resize, operator +=, operator +, and the
// assignment operator.
#ifndef MAIN_SAVITCH_CHAPTER4_MYSTRING_H
#define MAIN_SAVITCH_CHAPTER4_MYSTRING_H
#include <cstdlib> // Provides size_t
namespace main_savitch_4
{
class obstring
{
public:
// CONSTRUCTORS and DESTRUCTOR
obstring(const char str[ ] = "");
obstring(const obstring& source);
~obstring( );
// MODIFICATION MEMBER FUNCTIONS
void operator +=(const obstring& addend);
void operator +=(const char addend[ ]);
void operator +=(char addend);
void reserve(size_t n);
void operator =(const obstring& source);
// CONSTANT MEMBER FUNCTIONS
size_t length( ) const { return current_length; }
char operator [ ](size_t position) const;
// FRIEND FUNCTIONS
friend std::ostream& operator <<(std::ostream& outs, const obstring& source);
friend bool operator ==(const obstring& s1, const obstring& s2);
friend bool operator !=(const obstring& s1, const obstring& s2);
friend bool operator >=(const obstring& s1, const obstring& s2);
friend bool operator <=(const obstring& s1, const obstring& s2);
friend bool operator > (const obstring& s1, const obstring& s2);
friend bool operator < (const obstring& s1, const obstring& s2);
private:
char *sequence;
size_t allocated;
size_t current_length;
};
// NON-MEMBER FUNCTIONS for the obstring class
obstring operator +(const obstring& s1, const obstring& s2);
std::istream& operator >>(std::istream& ins, obstring& target);
void getline(std::istream& ins, obstring& target, char delimiter);
}
|