String串运算的实现知识点
上一个知识点   下一个知识点


本节概述 本节知识点 本节总结

二、String串运算的实现

这里举String串的创建算子,拼接算子,和赋值算子为例,说明String串运算的实现。    

创建算子(constructor)
String::String(char *s)
{
     //  先要确定新创字符串实际需要的存储空间,s的类型为(char *),作为新创字符串的初值。
     //  确定s的长度,用标准字符串函数strlen(s)计算长度
     size = strlen(s) ;
     // 然后,在动态存储区域开辟一块空间,用于存储初值s,把结束字符也包括进来
     str = new char [size+1];
}

拼接算子
String String::operator+ (String& s)
{
       // 把字符串s和本实例拼接成为一个长串返回
       String temp; //创建一个串temp
       int len;
        // 准备工作,计算拼接后的长串的长度
       len = size + s.size;
       // 把temp串创建时申请的存储空间全部释放
       delete [] temp.str;
       // 准备工作,开辟空间,为存放长串之用
       temp.str= new char [len+1];
       // 若开辟动态存储空间不成功,则退出
       assert(temp.str!= 0);
       temp.size = len;
        // 字符串str(以’\0’结尾)存到temp
       strcpy(temp.str, str);
       // 再把参数s的str和本实例的str拼接为长串
       strcat(temp.str, s.str);
       return temp;
}

赋值算子
String String::operator= (String& s)
{
        // 参数s将被赋值到本串
        // 若本串的串长和s的串长不同,则应该释放本串的
        // str存储空间,并开辟新的空间
       if (size != s.size)   {
              delete [] str ;         // 释放原存储空间
              str = new char [s.size+1];
              // 若开辟动态存储空间失败,则退出正常运行
              assert(str != 0);
              size = s.size;
      }
      strcpy(str , s.str );
      // 返回本实例,作为String类的一个实例
      return *this;
}