用C++定义一个字符串类

完成一个字符串类Strings的设计与实现,并设计程序测试。要求:
字符串初始化:Strings(); Strings(char *s); Strings(Strings &s);
int strlen(); //求字符串长度,不算‘/0’

//比较当前对象字符串与s的大小 0--相等 1----->s -1------<s
int strcmp(char *s) ; int strcmp(Strings& s);
//字符串连接,将s连接到当前字符串末尾
void strcat(Strings& s); void strcat(char *s);
//求子串 i----子串的起始位置 n---子串的长度
char * substr(int i,int n)
~Strings();
void display();

class Strings
{
public:
Strings()
{
    m_pBuff = NULL;
}
 Strings(char *s)
 {
   if(s!=NULL)
   {
       int len = 0;
       for(int i=0;s[i]!='\0';i++)
       {
           len++; 
       }
       m_pBuff  = new char[len+1];
       memset(m_pBuff,0,len+1);  
       memcpy(m_pBuff,s,len);
   }
 }
 Strings(Strings &s)
 {
    int len = s.strlen();
     if(len >0)
     {
        m_pBuff  = new char[len+1];
       memset(m_pBuff,0,len+1);  
       memcpy(m_pBuff,s.m_pBuff,len);
     }
 }
 int strlen()
 {
     if(m_pBuff == NULL)
     {
     return 0;
     }
       int len = 0;
       for(int i=0;s[i]!='\0';i++)
       {
           len++; 
       }
       return len;
 }
 int strcmp(char *s)
 {
   if(s==NULL && m_pBuff!=NULL)
   {
    return 1;
   }
   if(s==NULL && m_pBuff==NULL)
   {
     return 0;
   }
   if(m_pBuff==NULL)
   {
   return -1;
   }
   return ::strcmp(m_pBuff,s);
 }
 int strcmp(Strings& s)
 {
   return strcmp(s.m_pBuff);
 }
 void strcat(Strings& s)
 {
  int len = s.strlen();
  if(len>0)
  {
  
  int thisLen = this->strlen();
    int len2 = thisLen +len+1;
    char *tmp = new char[thisLen ];
    memcpy(tmp ,m_pBuff,thisLen );
    delete []m_pBuff;
    m_pBuff = new char[len2];
    memset(m_pBuff,0,len2);
    memcpy(m_pBuff,tmp,thisLen );
    memcpy(m_pBuff+thisLen,s.m_pBuff,len);
    delete [] tmp ;
  }
 }
  void strcat(char *s)
  {
   Strings tmp(s);
   strcat(tmp);
  }
  char * substr(int i,int n)
  {
     if(i>=this->strlen())
     {
     return NULL;
     }
     if(i<0)
     {
     return NULL;
     }
     char * tmp = new char[n+1];
     memset(tmp,0,n+1);
     memcpy(tmp,m_pBuff+i,n);
     return tmp;
     
  }
 ~Strings()
 {
 if(m_buff!=NULL)
     {
     delete []m_buff;
         }
 }
 void display()
 {
 if(m_pBuff!=NULL)
 {
 printf("%s",m_pBuff);
 }
 else
 {
  printf("");
 }
 
 }
private:
char *m_pBuff;
};

温馨提示:答案为网友推荐,仅供参考
相似回答