home *** CD-ROM | disk | FTP | other *** search
/ Boldly Go Collection / version40.iso / TS / 17A / DRWIN101.ZIP / STRING.CPP < prev    next >
C/C++ Source or Header  |  1991-11-08  |  3KB  |  155 lines

  1. #include "string.hpp"
  2.  
  3.  
  4. char String::scrap = ' ';
  5.  
  6.  
  7. String::String(int _size,char* s)
  8. {
  9.   size = 0;
  10.   len = 0;
  11.   flags = clip;
  12.   endchar = '\n';
  13.   str = NULL;
  14.   if (_size<1) _size = STRING_MAX_SIZE;
  15.   str = new char[_size];
  16.   if (str == NULL) return;
  17.   size = _size;
  18.   if (s != NULL)
  19.     for (len=0;(len<(size-1)) && (s[len]);len++) str[len] = s[len];
  20.   str[len] = 0;
  21. }   //String::String(int,char*)
  22.  
  23.  
  24. String::String(char* s)
  25. {
  26.   size = 0;
  27.   len = 0;
  28.   flags = clip;
  29.   endchar = '\n';
  30.   if (s == NULL)
  31.     str = new char[strlen(s)+1];
  32.   else
  33.     str = new char[STRING_MAX_SIZE];
  34.   if (str == NULL) return;
  35.   while (*s) str[len++] = *s++;
  36.   str[len]=0;
  37. }   //String::String(char*)
  38.  
  39.  
  40. String::~String()
  41. {
  42.   if (str) delete str;
  43.   str = NULL;
  44. }   //String::~String
  45.  
  46.  
  47. void String::operator = (String& s)
  48. {
  49.   int l = !s;
  50.   if (l>size) l = size-1;
  51.   for (len=0;len<l;len++) str[len] = s.str[len];
  52.   str[len]=0;
  53. }   //String::operator = (String&)
  54.  
  55.  
  56. void String::operator = (char* s)
  57. {
  58.   int l = strlen(s);
  59.   if (l>size) l = size-1;
  60.   for (len=0;len<l;len++) str[len] = *s++;
  61.   str[len]=0;
  62. }   //String::operator = (char*)
  63.  
  64.  
  65. void String::operator = (char c)
  66. {
  67.   if (size<2) return;
  68.   str[0] = c;
  69.   str[1] = 0;
  70.   len=1;
  71. }   //String::operator = (char*)
  72.  
  73.  
  74. String& String::operator + (String &s)
  75. {
  76.   static String* sum=NULL;
  77.  
  78.   if (sum != NULL) { delete sum; sum=NULL; }
  79.   sum = new String(len + !s + 1);
  80.   if (sum == NULL) return *this;
  81.   int i;
  82.   for (i=0;i<len;i++) sum->str[(sum->len)++] = str[i];
  83.   for (i=0;i<!s;i++)  sum->str[(sum->len)++] = s.str[i];
  84.   sum->str[sum->len] = 0;
  85.   return *sum;
  86. }   //String::operator + (String&)
  87.  
  88.  
  89. String& String::operator + (char* s)
  90. {
  91.   static String* sum=NULL;
  92.  
  93.   if (sum != NULL) { delete sum; sum=NULL; }
  94.   sum = new String(len + strlen(s) + 1);
  95.   if (sum == NULL) return *this;
  96.   int i;
  97.   for (i=0;i<len;i++) sum->str[(sum->len)++] = str[i];
  98.   while (*s)  sum->str[(sum->len)++] = *s++;
  99.   sum->str[sum->len] = 0;
  100.   return *sum;
  101. }   //String::operator + (char*)
  102.  
  103.  
  104. String& String::operator + (char c)
  105. {
  106.   static String* sum=NULL;
  107.  
  108.   if (sum != NULL) { delete sum; sum=NULL; }
  109.   sum = new String(len + 2);
  110.   if (sum == NULL) return *this;
  111.   int i;
  112.   for (i=0;i<len;i++) sum->str[(sum->len)++] = str[i];
  113.   sum->str[(sum->len)++] = c;
  114.   sum->str[sum->len] = 0;
  115.   return *sum;
  116. }   //String::operator + (char)
  117.  
  118.  
  119. String& String::Sub(int first,int length)
  120. {
  121.   static String* sub = NULL;
  122.  
  123.   if (first > len) first = len;
  124.   if (length > (len - first)) length = len - first;
  125.   if (sub != NULL) { delete sub; sub=NULL; }
  126.   sub = new String(length + 2);
  127.   if (sub == NULL) return *this;
  128.   for (int i = 0; (i < length); i++) *sub += str[first+i];
  129.   return *sub;
  130. }   //String::Sub(int,int)
  131.  
  132.  
  133. ostream& operator << (ostream& o,String& s)
  134. {
  135.   if ((s.flags & String::clip) && (o.width() > 0))
  136.   {
  137.     s.scrap = s.str[o.width()];
  138.     s.str[o.width()] = 0;
  139.     o << s.str;
  140.     s.str[o.width()] = s.scrap;
  141.   }
  142.   else
  143.     o << s.str;
  144.   return o;
  145. }   //operator << (ostream&,String&)
  146.  
  147.  
  148. String& operator >> (istream& i,String& s)
  149. {
  150.   i.getline(s.str,s.size,s.endchar);
  151.   s.len = strlen(s.str);
  152.   return s;
  153. }   //operator >> (istream&,String&)
  154.  
  155.