码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-03-31 07:12:57      阅读:260      评论:0      收藏:0      [点我收藏+]

标签:写类中的一个bug修复

 #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;}

为了输入能 带空格 但是 这里可能有bug即失去第一个字符

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

标签:写类中的一个bug修复

原文地址:http://sts609.blog.51cto.com/11227442/1758675

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!