⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 string.h

📁 班级通讯录c++编写
💻 H
字号:
#include <assert.h>
#include <iostream.h>

class string {
  public:
    string(){buflen=1; buffer= new char[buflen]; assert(buffer!=0);
      buffer[0]='\0'; };
    string(char c ){buffer=new char[2]; assert(buffer!=0);
      buffer[0]=c; buffer[1]='\0'; buflen=2;};
    string(unsigned size);
    string(const char* inittext);
    string(const string & initstr);
    //~string();
    friend class substring;
    unsigned length() const;
    void operator=(const string & right);
    char & operator[](unsigned index )const;
    void operator+=(const string & v);
    int compare(const string & ) const;
    operator const char*() const;
    substring operator()(unsigned start, unsigned len);
    friend void load_data();//存盘函数
  private:
    unsigned buflen;
    char * buffer;
};

string::string(unsigned size) {
   buflen=size+1; buffer=new char[buflen];
   assert(buffer!=0);
   for (unsigned i=0; i<buflen; i++) buffer[i]='\0';}
string::string(const char* inittext) {
   for (unsigned i=0; inittext[i]!='\0'; i++) buflen=i+1;
   if (i==0) buflen=1;
   buffer=new char[buflen];
   assert(buffer!=0);
   for ( i=0; i<buflen; i++) buffer[i]=inittext[i];
   buffer[i]='\0';
}
string::string(const string & initstr):buflen(initstr.buflen) {
   buffer=new char[initstr.buflen]; assert(buffer!=0);
   for (unsigned i=0; i<buflen; i++) buffer[i]=initstr[i];
   buffer[i]='\0';
}
//string::~string() {delete []buffer; buffer=0;}
unsigned string::length() const
  {for (unsigned i=0; buffer[i]!='\0'; i++);
   return i;}
void string::operator=(const string & right)
  {const unsigned rightlength=right.length();
   if (rightlength>= buflen)
     { buflen=rightlength+1;
       buffer=new char[buflen];
	   assert(buffer!=0);  }
   for (unsigned i=0; i<=buflen; i++) buffer[i]=right.buffer[i];
   buffer[i]='\0';
}

char nothing;
char & string::operator[](unsigned index) const
   {if (index>=buflen) { nothing='\0';  return nothing; }
    return buffer[index];}
void string::operator+=(const string & v)
     { unsigned i;
       unsigned conlen=length()+v.length();
       if (conlen>= buflen)
         { char * newbuffer=new char[1+conlen]; assert(newbuffer!=0);
           for (i=0; i<length(); i++) newbuffer[i]=buffer[i];
           delete []buffer; buffer=newbuffer; buflen=1+conlen;}
       else i=length();
       for (unsigned j=0; i<conlen; i++,j++) buffer[i]=v.buffer[j];
       buffer[i]='\0';
 }
int string::compare(const string & v) const
  {char *p=buffer; char *q=v.buffer;
   for(;(*p!='\0')&&(*p==*q);p++,q++); return *p-*q;}
string::operator const char*() const
  {return buffer;}
int operator<=(const string & left,const string & right)
  { return left.compare(right)<=0; }
int operator>=(const string & left,const string & right)
  { return left.compare(right)>=0; }
int operator<(const string & left,const string & right)
  { return left.compare(right)<0; }
int operator>(const string & left,const string & right)
  { return left.compare(right)>0; }
int operator==(const string & left,const string & right)
  { return left.compare(right)==0; }
int operator!=(const string & left,const string & right)
  { return left.compare(right)!=0; }
string operator+(const string & left,const string & right)
  { string result(left); result+=right; return result; }
istream & operator>>(istream & in,string & str)
  { char inbuffer[1000]; 
    if (in>>inbuffer) 
		str=inbuffer; 
    else str=""; 
	return in; }
ostream & operator<<(ostream & out, const string & str)
  {	for (unsigned i=0; str[i]!='\0'; i++)
       out<<str[i];
    return out; }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -