#include "hstring.h" HString& HString::assign(int l) { if(l>=0) { delete [] string; string=new char [l+1]; for(string[l]='\0';l--;string[l]=' '); } else errMsg(l); return *this; } HString& HString::assign(char c, int l) { if(l>=0) { delete [] string; string=new char [l+1]; for(string[l]='\0';l--;string[l]=c); } else errMsg(l); return *this; } HString::HString(const HString &h1, const HString &h2) { int l2=strlen(h2.string)+1; register int l=strlen(h1.string)+l2; string=new char [l]; while(l2) string[--l]=h2.string[--l2]; while(l--) string[l]=h1.string[l]; } HString::HString(const char * name, const HString &h) { int l2=strlen(h.string)+1; register int l=strlen(name)+l2; string=new char [l]; while(l2) string[--l]=h.string[--l2]; while(l--) string[l]=name[l]; } HString::HString( const HString &h, const char * name) { int l2=strlen(name)+1; register int l=strlen(h.string)+l2; string=new char [l]; while(l2) string[--l]=name[--l2]; while(l--) string[l]=h.string[l]; } HString & HString::upper(const HString &h) { int l=strlen(h.string); if(this!=&h) { delete [] string; string=new char[l+1]; string[l]='\0'; } while(l--) string[l]=toupper(h.string[l]); return *this; } HString & HString::lower(const HString &h) { int l=strlen(h.string); if(this!=&h) { delete [] string; string=new char[l+1]; string[l]='\0'; } while(l--) string[l]=tolower(h.string[l]); return *this; } HString & HString::replace(char oldChar, char newChar) { for(char* p=string;*p;p++) if(*p==oldChar) *p=newChar; return *this; } HString & HString::replace(int pos, const HString& s) { int l1=strlen(string)-pos; int l2=strlen(s.string); if(l1>0) for(int i=l1>l2 ? l2:l1;i--;string[i+pos]=s.string[i]); else errMsg(pos); return *this; } HString & HString::insert(int pos, const HString & i) { int l1=strlen(string); if(pos<=l1) { int l2=strlen(i.string); int l=++l1 + l2; register char* p=new char [l]; while(l1 > pos) p[--l]=string[--l1]; while(l2) p[--l]=i.string[--l2]; while(l--) p[l]=string[l]; delete [] string; string=p; } else errMsg(pos); return *this; } HString& HString::operator = (char c) { delete [] string; string=new char[2]; *string=c; *(string+1)='\0'; return *this; } HString& HString::operator = (const char * name) { delete [] string; string=new char[strlen(name)+1]; for(register char* p=string; *p++ = *name++;); return *this; } HString& HString::operator = (const HString &h) { if(this==&h) return *this; register int l=strlen(h.string); delete [] string; string=new char[++l]; while(l--) string[l]=h.string[l]; return *this; } HString& HString::operator = (int number) { char buffer[12]; ostrstream bufferOut(buffer,11); bufferOut<=length || size<=0) { errMsg(pos); return HString(); } int n=length-pos; if(size>n) size=n; HString s(string+pos,size); return s; } char& HString::operator[] (int pos) { if(pos<0 || pos>=int(strlen(string))) { errMsg(pos); exit(EXIT_FAILURE); } return string[pos]; } int HString::find(const char search) const { char* p=string; for(int i=0;*p;i++) { if(*p++==search) return i; } return -1; } int HString::find(const HString &search, int pos) const { if(pos>=0 && pos