home *** CD-ROM | disk | FTP | other *** search
- //----------------------------------------------------------
- // CSTRING.CPP -
- // (c) 1991 by Thole Groeneveld & toolbox -
- //----------------------------------------------------------
-
- #include "cstring.h"
-
- void DefaultStringErrHandler() {
- cerr << "ERROR : STRING OUT OF RANGE\n";
- }
-
- void (*String::ErrHandler)() = DefaultStringErrHandler;
-
- String::String()
- {
- length = 0;
- str = new char;
- str[0] = 0;
- }
-
- String::String (const char *s)
- {
- length = strlen(s);
- str = new char[length + 1];
- strcpy (str, s);
- }
-
- String::String (const String& s)
- {
- length = s.length;
- str = new char[length + 1];
- strcpy (str, s.str);
- }
-
- String::String (unsigned n)
- {
- length = n;
- str = new char[n+1];
- str[n] = 0;
- }
-
- String String::Left (unsigned r)
- {
- if (r > length) {
- String::ErrHandler();
- String s; return s;
- }
- else {
- String tmp (r);
- strncpy (tmp.str, str, r);
- return tmp;
- }
- }
-
- String String::Right (unsigned l)
- {
- if (l > length) {
- String::ErrHandler();
- String s; return s;
- }
- else {
- String tmp (l);
- strncpy (tmp.str, str + length - l, l);
- return tmp;
- }
- }
-
- String& String::InsertAt (unsigned pos, const String& s)
- {
- if (pos > length) {
- String::ErrHandler();
- return *this;
- }
- int newLength = length + s.length;
- char *tmp = new char[newLength + 1];
- strncpy (tmp, str, pos);
- strcpy (tmp + pos, s.str);
- strcpy (tmp + pos + s.length, str + pos);
- delete str;
- length = newLength;
- str = tmp;
- return *this;
- }
-
- String& String::WriteAt (unsigned pos, const String& s)
- {
- if (pos > length) {
- String::ErrHandler();
- return *this;
- }
- int n = length - pos;
- if (s.length < n)
- n = s.length;
- strncpy (str + pos, s.str, n);
- return *this;
- }
-
- String ToString (int i)
- {
- char buffer[32];
- sprintf (buffer, "%d", i);
- String s(strlen(buffer) + 1);
- strcpy (s.str, buffer);
- return s;
- }
-
- String ToString (long l)
- {
- char buffer[32];
- sprintf (buffer, "%ld", l);
- String s(strlen(buffer) + 1);
- strcpy (s.str, buffer);
- return s;
- }
-
- String ToString (double d)
- {
- char buffer[32];
- sprintf (buffer, "%lf", d);
- String s(strlen(buffer) + 1);
- strcpy (s.str, buffer);
- return s;
- }
-
- String& String::operator = (const String& s)
- {
- delete str;
- length = s.length;
- str = new char[length + 1];
- strcpy (str, s.str);
- return *this;
- }
-
- String operator + (const String& s1, const String& s2)
- {
- String tmp (s1.length + s2.length);
- strcpy (tmp.str, s1.str);
- strcpy (tmp.str + s1.length, s2.str);
- return tmp;
- }
-
- void String::operator += (const String& s)
- {
- char *tmp = new char[length + s.length + 1];
- strcpy (tmp, str);
- strcpy (tmp + length, s.str);
- length += s.length;
- delete str;
- str = tmp;
- }
-
- char& String::operator [] (unsigned n)
- {
- static char dummy;
- if ( n < length )
- return str[n];
- else {
- String::ErrHandler();
- return dummy;
- }
- }
-
- String String::operator () (unsigned l, unsigned r)
- {
- if ( (l > r) || (r > length) )
- {
- String::ErrHandler();
- String s; return s;
- }
- else {
- int n = r - l + 1;
- String tmp (n);
- strncpy (tmp.str, str + l, n);
- return tmp;
- }
- }
-
- istream& operator >> (istream& is, String& s)
- {
- char buffer[256];
- is.get (buffer, 256);
- s = buffer;
- return is;
- }
- //----------------------------------------------------------
- // Ende von CSTRING.CPP -
-