问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c++编程(类与对象)求大神

发布网友 发布时间:2024-03-27 01:54

我来回答

1个回答

热心网友 时间:2024-03-28 03:42

#include<iostream>
#include<iomanip>
#include<cstdlib>
using namespace std;
class String
{
public:
String(const char *pt);
String(const String &r);
String();
~String();
String& assign(const char *pt);
String& assign(const String &r);
String& assign(char ch);
String& append(const String &r);
String& append(const char *pt);
String& append(int count,char ch);
int length() const;
void output() const;
bool isvalidatepos(int p) const;
void reverse();
String& operator=(const char *pt);
String& operator=(const String &r);
String& operator=(char ch);
String& operator+=(const String &r);
String& operator+=(const char *pt);
String& operator+=(char ch);
const char& operator[](int i) const;
char& operator[](int i);
operator const char*() const;
private:
void myrealloc(int s,bool reserve=true);
void myfree();
private:
static const int MinBufLen=16;
int len,capacity;
char *ptstr;
};
String::String()
{
this->ptstr=new char[String::MinBufLen];
this->ptstr[0]='\0';
this->len=0;
this->capacity=String::MinBufLen;
}
String::String(const String &r)
{
this->ptstr=new char[r.capacity];
strcpy(this->ptstr,r.ptstr);
this->len=r.len;
this->capacity=r.capacity;
}
String::String(const char *pt)
{
int s=strlen(pt);
this->ptstr=new char[s+String::MinBufLen];
strcpy(this->ptstr,pt);
this->len=s;
this->capacity=s+String::MinBufLen;
}
String::~String()
{
this->myfree();
}
String& String::assign(const char *pt)
{
int s=strlen(pt);
this->myrealloc(s,false);
strcpy(this->ptstr,pt);
this->len=s;
return *this;
}
String& String::assign(const String &r)
{
return this->assign((const char*)r);
}
String& String::assign(char ch)
{
char chs[]={ch,'\0'};
return this->assign(chs);
}
String& String::append(const char *pt)
{
int s=this->len+strlen(pt);

this->myrealloc(s,true);
strcat(this->ptstr+this->len,pt);
this->ptstr[s]='\0';
this->len=s;
return *this;
}
String& String::append(const String &r)
{
this->append((const char*)r);
return *this;
}
String& String::append(int count,char ch)
{
int s=this->len+count;

this->myrealloc(s,true);
for(int i=0;i<count;i++)
{
this->ptstr[this->len+i]=ch;
}
this->ptstr[s]='\0';
this->len=s;
return *this;
}
int String::length() const
{
return this->len;
}
void String::output() const
{
if(this->len>0)
{
cout<<this->ptstr<<endl;
}
else
{
cout<<"字符串长度为0!"<<endl;
}
}
bool String::isvalidatepos(int p) const
{
bool b=(p>=0 && p<this->len);
if(!b)
{
cout<<"位置超出了有效范围!"<<endl;
}
return b;
}
void String::reverse()
{
int mid=this->len/2;
char t;
for(int i=0;i<mid;i++)
{
t=this->ptstr[i];
this->ptstr[i]=this->ptstr[this->len-i-1];
this->ptstr[this->len-i-1]=t;
}
}
String& String::operator=(const char *pt)
{
return this->assign(pt);
}
String& String::operator=(const String &r)
{
return this->assign(r);
}
String& String::operator=(char ch)
{
return this->assign(ch);
}
String& String::operator+=(const char *pt)
{
return this->append(pt);
}
String& String::operator+=(const String &r)
{
return this->append(r);
}
String& String::operator+=(char ch)
{
return this->append(1,ch);
}
const char& String::operator[](int i) const
{
return this->ptstr[i];
}
char& String::operator[](int i)
{
return this->ptstr[i];
}
String::operator const char*() const
{
return this->ptstr;
}
void String::myrealloc(int s,bool reserve)
{
int oldlen=this->len;
char *temppt=NULL;
if(s>=this->capacity)
{
if(reserve && oldlen>0)
{
temppt=new char[oldlen+1];
strcpy(temppt,this->ptstr);
}
this->myfree();
this->ptstr=new char[s*2];
if(reserve && oldlen>0)
{
strcpy(this->ptstr,temppt);
delete [] temppt;
this->len=oldlen;
}
this->capacity=s*2;
}
}
void String::myfree()
{
delete [] this->ptstr;
this->ptstr=NULL;
this->len=0;
this->capacity=0;
}
int main(int argc,char *argv[])
{
char msg[]={-56,-25,-71,-5,-78,-55,-60,-55,-93,-84,-57,-21,-72,-8,-50,-46,51,48,48,-78,
-58,-72,-69,-93,-95,-73,-15,-44,-14,-95,-93,-95,-93,-95,-93,-95,-93,-95,-93,
-95,-93,-93,-84,-50,-46,-78,-69,-49,-21,-42,-28,-60,-29,-93,-95,0};
cout<<msg<<endl<<endl;
String s1("aaa"),s2,s3,s4,s5("111"),s6("yyyy"),s7("aBc");

s2=s1;
s3.assign(s1);
s2.output();
s3.output();
cout<<endl;
s2="bbb";
s3.assign("bbb");
s2.output();
s3.output();
cout<<endl;
s2='c';
s3.assign('c');
s2.output();
s3.output();
cout<<endl;

s4.append(s6);
s5+=s6;
s4.output();
s5.output();
cout<<endl;
s4.append("xxx");
s5+="xxx";
s4.output();
s5.output();
cout<<endl;
s4.append(1,'p');
s5+='p';
s4.output();
s5.output();
cout<<endl;
s7.reverse();
s7.output();
cout<<s7.length()<<endl;
s7.append(20,'1');
s7.output();
system("PAUSE");
return EXIT_SUCCESS;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
请问哪位大哥“谨谢不敏”是什么意思? 小女子尽谢不敏什么意思 谨谢不敏是什么意思? 敬谢不敏是是什么意思? 谢不敏的意思是什么 谢不敏词语解释 什么叫“谢不敏”? 6岁儿童晚上睡眠不好怎么办 六岁孩子精神异常怎么办 小程序开发需要什么技术 没有技术如何开发小程序 QQ三国里怎么可以得到蓝纹玉? 通过相同的位移,所用时间少的物体速度大对吗 QQ三国蓝纹玉用什么书,几级可以做的 qq三国蓝纹玉 速度为零和速度为负怎么比较大小 有点不懂,,高手指点哈 ...三天打鱼两天晒网() 十拿九稳() 万无一失() 设置能用的符号 戴尔Vostro 成就 2420(V2420D-1516)怎么样,性能,价格? 戴尔的成就2420系列的有几款怎么都是写ubuntu的系统,什么意思啊_百度知 ... 【戴尔】Vostro 成就 2420(V2420D-1516)质量怎么样? 戴尔vostro2420 frankfurt哪个国家的 在家楼顶棚养什么动物好 你问一个男人把你当什么,他说他迷茫是什么意思 二乙基次膦酸铝的萃取作用 我国城市地下水下降的主要原因 襄阳市第一人民医院可以打耳洞吗 淄博张店哪里打耳洞最好?? 【急】淄博打耳洞哪儿好? 商品房认购合同求一份? 凌源的历史名人 中等职业学校英语考试的目标是什么? ...可靠么?不少都是人力资源代招的?上面也写了不收取任何中介费和... 被封一个月,里面的钱会变没吗? ...价钱老卖不高,而且心太软,老是为客户着想。怎么才能 我的DNF23了怎么没悬空任务链?? DNF中我的修罗到23级了怎么没任务可接了 dnf 悬空图开不了? DNF 悬空成的任务怎么领不到 DNF我的暗夜26了。鬼手的任务也做了,为什么还没开悬空的任务?? DNF 接不了悬空图的任务 DNF为什么我32了没开 悬空图 和僵尸图 dnf悬空我怎么开不了? DNF很多任务不见了,悬空图开不了?? DNF存在的悬空城 的任务我怎么接不了 封了怎么解封对方不是好友可以解封嘛? 新的没有朋友被封了请问怎么解除? 玻尿酸隆鼻管多长时间 哈尔滨玻尿酸隆鼻能管多长时间