武汉c培训
达内武汉中心

15271940953

热门课程

C++ 写类中的一个bug修复

  • 时间:2016-07-05
  • 发布:文洲
  • 来源:51CTO

 #include"wz.h"
 #include"sts.h"
class _string
{
    friend std::istream& operator>>(std::istream& is, _string& a);//bug 1 2
    friend std::ostream& operator<<(std::ostream& os,_string& a);
      
public:
    _string()     //默认构造函数
    {
        length = 0;
        b=new char[1];
        b[0]='\0';
   }  
          
     _string(char *a);   //构造函数
    _string(int n,char a);
    ~_string(); //析构函数
    _string(_string &a);  //复制构造函数
    int size(){return length;}  //获得字符串长度
    _string operator+(const _string& a);   //重载'+'操作符
    _string& operator+=(const _string& a);   //重载'+='操作符
    _string& operator=(const _string& a);   //重载赋值操作符
     int operator<(const _string &a);
    int operator>(const _string &a);
    char& operator[]( int n);   //重载下标操作符
    _string  substr(int pos,int n);   //返回子字符串
   _string  substr(int pos);   //返回子字符串
  
  
 private:
    char *b;
    int length;
};
 
  
_string::_string(char *a)     //构造函数
{
    length = strlen(a);  
    b = new char[length+1];
    for(int  i= 0;i<length;i++)
    {
        b[i] = a[i];
    }
    b[length] = '\0';
}
  
_string::_string(int n,char a)
{
    b=new char[n+1];
    for(int  i= 0;i<n;i++)
    {
        b[i] =a;
    }
    b[n] = '\0';
}
  
_string::~_string()     //析构函数
{
    delete []b;
    length=0;
}
  
_string::_string(_string &a)      //复制构造函数
{
    length=a.size();
    b=new char [length+1];
   for(int  i = 0;i<length;i++)
    {
        b[i] = a.b[i];
    }
    b[length] = '\0';
}
  
_string  _string::operator+(const _string& a)    //重载+
{
    int newLen = length+a.length;
    char *str;
    str = new char[newLen+1];
    int count = 0;
    for(int i = 0;i<length;i++)
    {
        str[i] = this->b[i];
        count++;
    }
      
    for(int i =0;count<newLen;count++,i++)
    {
        str[i] = a.b[i];
    }
    str[newLen] = '\0';
    _string temp(str);
      
    return temp;
}
  
_string&  _string:: operator+=(const _string& a)   //重载+=
{
    int newLen = length+a.length;
    char *str;
    str = new char[newLen+1];
    int count = 0;
    for(int i = 0;i<length;i++)
    {
        str[i] = this->b[i];
        count++;
    }
      
    for(int i =0;count<newLen;count++,i++)
    {
        str[i] = a.b[i];
    }
    str[newLen] = '\0';
    _string temp(str);
    *this=temp;
    return *this;
    }
_string& _string:: operator=(const _string &a)    //重载=
  {
      if(this==&a)
          return *this;
  
      delete []b;
      length = a.length;
      b = new char[length+1];
      for(int  i = 0;i<length;i++)
    {
        b[i] = a.b[i];
    }
    b[length] = '\0';
          return *this;
  
}
int _string:: operator<(const _string &a)    
  {
    
  while (*this->b == *a.b)
{
if (*this->b == '?')
{
return 0;
}
this->b++;
b++;
}
if (*this->b - *a.b < 0)
{
return 1;
}
 else return 0;;
    
  
}
int _string:: operator>(const _string &a)    
  {
    
  while (*this->b == *a.b)
{
if (*this->b == '?')
{
return 0;
}
this->b++;
b++;
}
if (*this->b - *a.b >0)
{
return 1;
}
 else return 0;;
  
  
}
  
  char& _string:: operator[]( int n)  //重载下标操作符
  {
      if(n>length)
          return b[length-1];
      else
          return b[n];
  }
  
  ostream& operator<<(ostream& os, _string& a)  //重载输出符
  {
      os<<a.b<<endl;
      return os;
  }
/*
  istream& operator>>(std::istream& is, _string& a)  //重载输入符
  {  // 1 while(*a.b!='\0')
      // {is>>a.b ;}
        
     //2  a.b=new char[256];
      is>>a.b ;
      a.length=strlen(a.b);
      return is;
  }
 */
//  5
  
istream& operator>>(istream &is, _string &str)//输入
 {
char tem[1000];  //简单的申请一块内存
 is.get(tem,1000,'\n');
str.length = strlen(tem);
str.b = new char[str.length + 1];
strcpy(str.b, tem);
return is;
}
  
  
 _string  _string::substr(int pos, int n)    //两个接受不同参数的substr函数,返回子字符串
  {
      char *p = new char[n+1];
      for(int i=0;i<n;i++)
      {
          p[i]=b[pos];
          pos++;
      }
      p[n]='\0';
      _string k(p);
      k.length=n;
      return  k;
 }
      
 _string  _string::substr(int pos)
 {
     int len=length;
     char *p=new char[len-pos+1];
     int t=pos;
     for(int i=0;t<len;t++,i++)
     {
         p[i]=b[t];
     }
     p[t]='\0';
      _string k(p);
      k.length=len-pos;
      return  k;
 }
 
int main (){;                    
  
_string a;
cin>>a;
cout<<a;
return 0;
 
 
 return 0;}
上一篇:c++封装链表实现
下一篇:c++ 模板实现顺序表
选择城市和中心
贵州省

广西省

海南省