急求c++题目答案答案,非常感谢 15
急求c++题目答案:设计一个字符串类,除具有一般的输入|输出字符串的功能外,还要求具有计算字符串长度,连接两个字符串等功能。那位大神知道发我邮箱:sudalv0417@1...
急求c++题目答案:设计一个字符串类,除具有一般的输入|输出字符串的功能外,还要求具有计算字符串长度,连接两个字符串等功能。那位大神知道发我邮箱:sudalv0417@163.com,非常感谢
展开
展开全部
//原创 VC6.0测试过
#include <iostream.h>
#include <string.h>
class MyString
{
public:
MyString(); //无参数构造函数
MyString(const MyString &c); //复制构造函数
MyString(char *p); //有参构造函数
void SetString(char *p); //设置字符串
int GetLength(); //返回字符串长度
MyString Ltrim(); //去除左边空格
MyString Rtrim(); //去除右边空格
MyString StrLink(char *p); //连接字符串
MyString StrLink(MyString &c); //连接字符串
MyString Ucase(); //将字符串中的所有小写字母转为大写字母
MyString Lcase(); //将字符串中的所有大写字母转为小写字母
MyString DelChar(char ch); //删除字符串中所有出现的指定字符
char * ToString(); //返回字符数组
MyString operator = (char *p);
MyString operator = (const MyString one);
MyString operator +=(char *p);
MyString operator + (char *p);
MyString operator + (const MyString one);
friend MyString operator + (char *p,const MyString one);
~MyString(); //析构函数
private:
char *str;
int array_len; //字符数组长度
int str_len; //字符串实际长度
};
MyString::MyString()
{
this->str=new char[1];
this->str_len=1;
this->array_len=0;
}
MyString::MyString(char *p)
{
int i=0;
while(*(p+i)!='\0')
{
i++;
}
this->str=new char[i+1];
this->array_len=i+1;
this->str_len=i;
for(int j=0;j<array_len;j++) str[j]=*(p+j);
}
MyString::MyString(const MyString &c)
{
this->array_len=c.array_len;
this->str_len=c.str_len;
str=new char[this->array_len];
for(int i=0;i<this->array_len;i++)
this->str[i]=c.str[i];
}
void MyString::SetString(char *p)
{
if(this->str) delete [] this->str;
int i=0;
while(*(p+i)!='\0')
{
i++;
}
this->str=new char[i+1];
this->array_len=i+1;
this->str_len=i;
for(int j=0;j<array_len;j++) str[j]=*(p+j);
}
int MyString::GetLength()
{
return this->str_len;
}
MyString MyString::operator =(const MyString one)
{
SetString(one.str);
return *this;
}
MyString MyString::operator +(char*p)
{
MyString one=this->StrLink(p);
return one;
}
MyString MyString::operator +=(char *p)
{
*this=this->StrLink(p);
return *this;
}
MyString MyString::DelChar(char ch)
{
int count=0;
char * tmp=new char[array_len];
for(int i=0,j=0;i<array_len;i++)
{
if(str[i]!=ch)tmp[j++]=str[i];
}
MyString * oneString=new MyString(tmp);
delete [] tmp;
return *oneString;
}
MyString operator+(char *p,const MyString one)
{
char *tmp=new char[strlen(p)+one.array_len];
int i=0;
for(;i<(int)strlen(p);i++)
{
tmp[i]=p[i];
}
for(int j=0;j<one.array_len;j++)
{
tmp[i++]=one.str[j];
}
return *(new MyString(tmp));
}
MyString MyString::operator +(const MyString one)
{
return *this+one.str;
}
MyString MyString::StrLink(MyString &c)
{
return *this+c.ToString();
}
MyString MyString::StrLink(char *p)
{
char *tmp=new char[array_len+strlen(p)];
int i=0;
for(;i<array_len-1;i++)
{
tmp[i]=str[i];
}
for(int j=0; j<=(int)(strlen(p)); j++,i++)
{
tmp[i]=p[j];
}
return *(new MyString(tmp));
}
MyString MyString::Lcase()
{
MyString *oneString=new MyString(*this);
for(int i=0;i<array_len;i++)
{
if(str[i]>=65 && str[i]<=90)
oneString->str[i]+=32;
}
return *oneString;
}
MyString MyString::Ucase()
{
MyString *oneString=new MyString(*this);
for(int i=0;i<array_len;i++)
{
if(str[i]>=97 && str[i]<=122)
oneString->str[i]-=32;
}
return *oneString;
}
MyString MyString::Ltrim()
{
MyString *oneString=new MyString(*this);
char *tmp=new char[array_len];
bool go=false;
for(int i=0,j=0;i<array_len;i++)
{
if(!go)
if(str[i]!=32)go=true;
else continue;
tmp[j++]=str[i];
}
oneString->SetString(tmp);
delete [] tmp;
return *oneString;
}
MyString MyString::Rtrim()
{
char *tmp=new char[array_len];
for(int i=0;i<array_len;i++)
{
tmp[i]=str[i];
}
for(int j=array_len-2;j>0;j--)
{
if(tmp[j]==' ')tmp[j]='\0';
else break;
}
MyString one(tmp);
delete [] tmp;
return one;
}
MyString::~MyString()
{
if(this->str) delete [] this->str;
}
char* MyString::ToString()
{
return this->str;
}
int main(int argc, char* argv[])
{
MyString str1("wangaochao"); //初始化str1
str1=str1.DelChar('o');//删除'o' str1.str="wangacha"
MyString str2;
str2.SetString(" and dengxiaoqin");
str1=str1.StrLink(str2); //对象相连接str1.str="wangacha and dengxiaoqin"
//也可以用str1=str1+str2; 或 str1+=str;都可以达到同相的效果
MyString str3=str1.StrLink(" are teachers.");
//str3.str="wangacha and dengxiaoqin are teachers."
//MyString str3=str1+" are teachers."可以达到上面相同的效果
cout<<str1.ToString()<<endl; //显示 wangacha and dengxiaoqin are teachers
MyString one="you say:"+str1; //one.str="you say:wangacha and dengxiaoqin are teachers"
cout<<one.ToString()<<endl;
one=one.Ucase();//转换成大写
cout<<one.ToString()<<endl;
cout<<one.Lcase().ToString()<<endl;//再转换成小写,但不改变one本身.
one=" "+one+" ";//加上左右空格
cout<<one.ToString()<<"right"<<endl;//看效果
one=one.Ltrim();//去掉左右空格
one=one.Rtrim();
cout<<one.ToString()<<"right"<<endl;//看效果
cout<<one.GetLength()<<endl;//输出字符数
return 0;
}
#include <iostream.h>
#include <string.h>
class MyString
{
public:
MyString(); //无参数构造函数
MyString(const MyString &c); //复制构造函数
MyString(char *p); //有参构造函数
void SetString(char *p); //设置字符串
int GetLength(); //返回字符串长度
MyString Ltrim(); //去除左边空格
MyString Rtrim(); //去除右边空格
MyString StrLink(char *p); //连接字符串
MyString StrLink(MyString &c); //连接字符串
MyString Ucase(); //将字符串中的所有小写字母转为大写字母
MyString Lcase(); //将字符串中的所有大写字母转为小写字母
MyString DelChar(char ch); //删除字符串中所有出现的指定字符
char * ToString(); //返回字符数组
MyString operator = (char *p);
MyString operator = (const MyString one);
MyString operator +=(char *p);
MyString operator + (char *p);
MyString operator + (const MyString one);
friend MyString operator + (char *p,const MyString one);
~MyString(); //析构函数
private:
char *str;
int array_len; //字符数组长度
int str_len; //字符串实际长度
};
MyString::MyString()
{
this->str=new char[1];
this->str_len=1;
this->array_len=0;
}
MyString::MyString(char *p)
{
int i=0;
while(*(p+i)!='\0')
{
i++;
}
this->str=new char[i+1];
this->array_len=i+1;
this->str_len=i;
for(int j=0;j<array_len;j++) str[j]=*(p+j);
}
MyString::MyString(const MyString &c)
{
this->array_len=c.array_len;
this->str_len=c.str_len;
str=new char[this->array_len];
for(int i=0;i<this->array_len;i++)
this->str[i]=c.str[i];
}
void MyString::SetString(char *p)
{
if(this->str) delete [] this->str;
int i=0;
while(*(p+i)!='\0')
{
i++;
}
this->str=new char[i+1];
this->array_len=i+1;
this->str_len=i;
for(int j=0;j<array_len;j++) str[j]=*(p+j);
}
int MyString::GetLength()
{
return this->str_len;
}
MyString MyString::operator =(const MyString one)
{
SetString(one.str);
return *this;
}
MyString MyString::operator +(char*p)
{
MyString one=this->StrLink(p);
return one;
}
MyString MyString::operator +=(char *p)
{
*this=this->StrLink(p);
return *this;
}
MyString MyString::DelChar(char ch)
{
int count=0;
char * tmp=new char[array_len];
for(int i=0,j=0;i<array_len;i++)
{
if(str[i]!=ch)tmp[j++]=str[i];
}
MyString * oneString=new MyString(tmp);
delete [] tmp;
return *oneString;
}
MyString operator+(char *p,const MyString one)
{
char *tmp=new char[strlen(p)+one.array_len];
int i=0;
for(;i<(int)strlen(p);i++)
{
tmp[i]=p[i];
}
for(int j=0;j<one.array_len;j++)
{
tmp[i++]=one.str[j];
}
return *(new MyString(tmp));
}
MyString MyString::operator +(const MyString one)
{
return *this+one.str;
}
MyString MyString::StrLink(MyString &c)
{
return *this+c.ToString();
}
MyString MyString::StrLink(char *p)
{
char *tmp=new char[array_len+strlen(p)];
int i=0;
for(;i<array_len-1;i++)
{
tmp[i]=str[i];
}
for(int j=0; j<=(int)(strlen(p)); j++,i++)
{
tmp[i]=p[j];
}
return *(new MyString(tmp));
}
MyString MyString::Lcase()
{
MyString *oneString=new MyString(*this);
for(int i=0;i<array_len;i++)
{
if(str[i]>=65 && str[i]<=90)
oneString->str[i]+=32;
}
return *oneString;
}
MyString MyString::Ucase()
{
MyString *oneString=new MyString(*this);
for(int i=0;i<array_len;i++)
{
if(str[i]>=97 && str[i]<=122)
oneString->str[i]-=32;
}
return *oneString;
}
MyString MyString::Ltrim()
{
MyString *oneString=new MyString(*this);
char *tmp=new char[array_len];
bool go=false;
for(int i=0,j=0;i<array_len;i++)
{
if(!go)
if(str[i]!=32)go=true;
else continue;
tmp[j++]=str[i];
}
oneString->SetString(tmp);
delete [] tmp;
return *oneString;
}
MyString MyString::Rtrim()
{
char *tmp=new char[array_len];
for(int i=0;i<array_len;i++)
{
tmp[i]=str[i];
}
for(int j=array_len-2;j>0;j--)
{
if(tmp[j]==' ')tmp[j]='\0';
else break;
}
MyString one(tmp);
delete [] tmp;
return one;
}
MyString::~MyString()
{
if(this->str) delete [] this->str;
}
char* MyString::ToString()
{
return this->str;
}
int main(int argc, char* argv[])
{
MyString str1("wangaochao"); //初始化str1
str1=str1.DelChar('o');//删除'o' str1.str="wangacha"
MyString str2;
str2.SetString(" and dengxiaoqin");
str1=str1.StrLink(str2); //对象相连接str1.str="wangacha and dengxiaoqin"
//也可以用str1=str1+str2; 或 str1+=str;都可以达到同相的效果
MyString str3=str1.StrLink(" are teachers.");
//str3.str="wangacha and dengxiaoqin are teachers."
//MyString str3=str1+" are teachers."可以达到上面相同的效果
cout<<str1.ToString()<<endl; //显示 wangacha and dengxiaoqin are teachers
MyString one="you say:"+str1; //one.str="you say:wangacha and dengxiaoqin are teachers"
cout<<one.ToString()<<endl;
one=one.Ucase();//转换成大写
cout<<one.ToString()<<endl;
cout<<one.Lcase().ToString()<<endl;//再转换成小写,但不改变one本身.
one=" "+one+" ";//加上左右空格
cout<<one.ToString()<<"right"<<endl;//看效果
one=one.Ltrim();//去掉左右空格
one=one.Rtrim();
cout<<one.ToString()<<"right"<<endl;//看效果
cout<<one.GetLength()<<endl;//输出字符数
return 0;
}
展开全部
/*
1.编一个使用派生类的程序,使一个包含圆和圆柱的几何尺寸的类,
它使用内部数据建立几何形状并显示它们的尺寸.面积和体积。
2.设计一个平面几何中点的位置类position,该类至少提供移动,
求到另一点的距离(包括到原点的距离),求x坐标,求y坐标等
操作。编一主函数检查它们。
*/
#include <stdio.h>
#include <math.h>
//圆类
class Circle
{
public:
float r;//半径
public:
//获取面积
float GetArea()
{
return 3.14159265 * r * r;
}
//输出半径,面积
virtual void ShowMsg()
{
printf("圆的半径为 %f ,面积为 %f\n",r,GetArea());
}
};
//圆柱类,从圆派生,多一个高度
class Cylinder : public Circle
{
public:
float h;//高
public:
//获取体积
float GetVolume()
{
//底面积乘高
return GetArea() * h;
}
//输出底面半径,底面积,高,体积
virtual void ShowMsg()
{
printf("圆柱的底面半径为 %f ,底面积为 %f ,高为 %f ,体积为 %f\n",
r,
GetArea(),
h,
GetVolume());
}
};
//平面内几何点Position类
class Position
{
private:
float x;//X坐标
float y;//Y坐标
public:
//设置X坐标
void SetX(float newX)
{
x = newX;
}
//设置Y坐标
void SetY(float newY)
{
y = newY;
}
//获取X及Y坐标
float GetX()
{
return x;
}
float GetY()
{
return y;
}
//计算到另外一个点的距离
float dist(Position b)
{
return sqrt( pow(b.x - x,2) + pow(b.y - y,2) );
}
};
void main(void)
{
//定义圆
Circle aCircle;
//定义圆柱
Cylinder aCylinder;
//设置圆的半径
aCircle.r = 3;
//输出圆的信息
aCircle.ShowMsg();
//设置圆柱底圆半径
aCylinder.r = 4;
//设置圆柱高
aCylinder.h = 5;
//输出圆柱的信息
aCylinder.ShowMsg();
//原点:
Position P1;
P1.SetX(0.0);
P1.SetY(0.0);
//X坐标为4,Y坐标为3的点,根据勾股定理可以知道,它到原点的距离为5,可以验证程序正确性
Position P2;
P2.SetX(4);
P2.SetY(3);
//求P2到P1的距离
printf("P2(%f,%f)到P1(%f,%f)的距离为%f\n",P2.GetX(),P2.GetY(),P1.GetX(),P1.GetY(),P2.dist(P1));
//也可以设置P2的坐标为第二象限的(-4,3)点来验证
P2.SetX(-4);
P2.SetY(3);
//求P2到P1的距离
printf("P2(%f,%f)到P1(%f,%f)的距离为%f\n",P2.GetX(),P2.GetY(),P1.GetX(),P1.GetY(),P2.dist(P1));
//第三象限及第四象限同理
P2.SetX(-4);
P2.SetY(-3);
//求P2到P1的距离
printf("P2(%f,%f)到P1(%f,%f)的距离为%f\n",P2.GetX(),P2.GetY(),P1.GetX(),P1.GetY(),P2.dist(P1));
P2.SetX(4);
P2.SetY(-3);
//求P2到P1的距离
printf("P2(%f,%f)到P1(%f,%f)的距离为%f\n",P2.GetX(),P2.GetY(),P1.GetX(),P1.GetY(),P2.dist(P1));
getchar();
}
1.编一个使用派生类的程序,使一个包含圆和圆柱的几何尺寸的类,
它使用内部数据建立几何形状并显示它们的尺寸.面积和体积。
2.设计一个平面几何中点的位置类position,该类至少提供移动,
求到另一点的距离(包括到原点的距离),求x坐标,求y坐标等
操作。编一主函数检查它们。
*/
#include <stdio.h>
#include <math.h>
//圆类
class Circle
{
public:
float r;//半径
public:
//获取面积
float GetArea()
{
return 3.14159265 * r * r;
}
//输出半径,面积
virtual void ShowMsg()
{
printf("圆的半径为 %f ,面积为 %f\n",r,GetArea());
}
};
//圆柱类,从圆派生,多一个高度
class Cylinder : public Circle
{
public:
float h;//高
public:
//获取体积
float GetVolume()
{
//底面积乘高
return GetArea() * h;
}
//输出底面半径,底面积,高,体积
virtual void ShowMsg()
{
printf("圆柱的底面半径为 %f ,底面积为 %f ,高为 %f ,体积为 %f\n",
r,
GetArea(),
h,
GetVolume());
}
};
//平面内几何点Position类
class Position
{
private:
float x;//X坐标
float y;//Y坐标
public:
//设置X坐标
void SetX(float newX)
{
x = newX;
}
//设置Y坐标
void SetY(float newY)
{
y = newY;
}
//获取X及Y坐标
float GetX()
{
return x;
}
float GetY()
{
return y;
}
//计算到另外一个点的距离
float dist(Position b)
{
return sqrt( pow(b.x - x,2) + pow(b.y - y,2) );
}
};
void main(void)
{
//定义圆
Circle aCircle;
//定义圆柱
Cylinder aCylinder;
//设置圆的半径
aCircle.r = 3;
//输出圆的信息
aCircle.ShowMsg();
//设置圆柱底圆半径
aCylinder.r = 4;
//设置圆柱高
aCylinder.h = 5;
//输出圆柱的信息
aCylinder.ShowMsg();
//原点:
Position P1;
P1.SetX(0.0);
P1.SetY(0.0);
//X坐标为4,Y坐标为3的点,根据勾股定理可以知道,它到原点的距离为5,可以验证程序正确性
Position P2;
P2.SetX(4);
P2.SetY(3);
//求P2到P1的距离
printf("P2(%f,%f)到P1(%f,%f)的距离为%f\n",P2.GetX(),P2.GetY(),P1.GetX(),P1.GetY(),P2.dist(P1));
//也可以设置P2的坐标为第二象限的(-4,3)点来验证
P2.SetX(-4);
P2.SetY(3);
//求P2到P1的距离
printf("P2(%f,%f)到P1(%f,%f)的距离为%f\n",P2.GetX(),P2.GetY(),P1.GetX(),P1.GetY(),P2.dist(P1));
//第三象限及第四象限同理
P2.SetX(-4);
P2.SetY(-3);
//求P2到P1的距离
printf("P2(%f,%f)到P1(%f,%f)的距离为%f\n",P2.GetX(),P2.GetY(),P1.GetX(),P1.GetY(),P2.dist(P1));
P2.SetX(4);
P2.SetY(-3);
//求P2到P1的距离
printf("P2(%f,%f)到P1(%f,%f)的距离为%f\n",P2.GetX(),P2.GetY(),P1.GetX(),P1.GetY(),P2.dist(P1));
getchar();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
c++有一个string类,你可以参照其源码
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询