您的位置:首页 > 编程语言 > C语言/C++

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

2016-03-31 00:16 483 查看
#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
= '\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
;
}

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
='\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即失去第一个字符
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: