summaryrefslogtreecommitdiff
path: root/chapter4/mystring.h
diff options
context:
space:
mode:
Diffstat (limited to 'chapter4/mystring.h')
-rw-r--r--chapter4/mystring.h117
1 files changed, 117 insertions, 0 deletions
diff --git a/chapter4/mystring.h b/chapter4/mystring.h
new file mode 100644
index 0000000..2019fc9
--- /dev/null
+++ b/chapter4/mystring.h
@@ -0,0 +1,117 @@
+// FILE: mystring.h
+// CLASS PROVIDED: string
+// This is a simple version of the Standard Library string.
+// 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 string class:
+// string(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 string 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 string class:
+// void operator +=(const string& 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 string class:
+// string operator +(const string& s1, const string& s2)
+// Postcondition: The string returned is the catenation of s1 and s2.
+//
+// istream& operator >>(istream& ins, string& 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 string& source)
+// Postcondition: The sequence of characters in source has been written
+// to outs. The return value is the ostream outs.
+//
+// void getline(istream& ins, string& 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 string class:
+// Assignments and the copy constructor may be used with string objects.
+//
+// TOTAL ORDER SEMANTICS for the string class:
+// The six comparison operators (==, !=, >=, <=, >, and <) are implemented
+// for the string class, forming a total order semantics, using the usual
+// lexicographic order on strings.
+//
+// DYNAMIC MEMORY usage by the string 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 string
+ {
+ public:
+ // CONSTRUCTORS and DESTRUCTOR
+ string(const char str[ ] = "");
+ string(const string& source);
+ ~string( );
+ // MODIFICATION MEMBER FUNCTIONS
+ void operator +=(const string& addend);
+ void operator +=(const char addend[ ]);
+ void operator +=(char addend);
+ void reserve(size_t n);
+ void operator =(const string& source);
+ // CONSTANT MEMBER FUNCTIONS
+ size_t length( ) const { return current_length; }
+ char operator [ ](size_t position) const;
+ // FRIEND FUNCTIONS
+ friend ostream& operator <<(ostream& outs, const string& source);
+ friend bool operator ==(const string& s1, const string& s2);
+ friend bool operator !=(const string& s1, const string& s2);
+ friend bool operator >=(const string& s1, const string& s2);
+ friend bool operator <=(const string& s1, const string& s2);
+ friend bool operator > (const string& s1, const string& s2);
+ friend bool operator < (const string& s1, const string& s2);
+ private:
+ char *sequence;
+ size_t allocated;
+ size_t current_length;
+ };
+
+ // NON-MEMBER FUNCTIONS for the string class
+ string operator +(const string& s1, const string& s2);
+ istream& operator >>(istream& ins, string& target);
+ void getline(istream& ins, string& target, char delimiter);
+}
+
+#endif