一.题目
写一个字符串的类,要求:
1.可以返回字符串的首地址
2.返回字符串里想要下标的值(鄙人懒,数组没实现这个功能)
3.可以设置字符串的内容
4.拼接两个字符串
分别用数组和指针来实现
(1)数组
#include <iostream>
#include <cstring>
using namespace std;
class arr
{
public:
void insert(const int n=0);
void show(void);
int* get_addr();
char* at(const int id,const char data);
void insert1(const int m=0);
char* append(arr );
private:
int len;
char buf[20];
char str[20];
};
void arr::insert(const int n)
{
for(int i=0;i<n;i++)
{
cin>>buf[i];
}
buf[n]='\0';
len=n;
}
void arr::insert1(const int m)
{
for(int i=0;i<m;i++)
{
cin>>str[i];
}
str[m]='\0';
len=m;
}
int* arr::get_addr()
{
return (int*)buf;
}
void arr::show(void)
{
for(int i=0;i<len;i++)
{
cout<<buf[i];
}
cout<<"\n";
}
char* arr::at(const int id,const char data)
{
buf[id]=data;
return buf;
}
char*arr:: append(arr a)
{
return strcat(buf,a.str);
}
int main()
{
arr A;
A.insert(5);
// A.show();
arr B;
B.insert1(5);
A.get_addr();
// cout<<A.at(0,'a')<<endl;
cout<<A.get_addr()<<endl;
cout<<A.append(B)<<endl;
return 0;
}
运行结果
(2)指针
#include <iostream>
#include <cstring>
using namespace std;
class arr
{
public:
//普通构造
arr(char *p=nullptr)
{
cout<<"用到了普通构造"<<endl;
str=new char[strlen(p)+1];
strcpy(str,p);
}
//拷贝构造 浅
/* arr(const arr &obj)
{
cout<<"浅-cpy"<<endl;
str=obj.str;
}*/
//深拷贝构造
arr(const arr &obj)
{
cout<<"用到了深拷贝"<<endl;
str=new char[strlen(obj.str)+1];
strcpy(str,obj.str);
}
//移动构造
arr( arr &&obj)
{
cout<<"用到了移动构造"<<endl;
str=obj.str;
obj.str=nullptr;
}
//获取地址
int *get_addr()
{
cout<<"地址:"<<endl;
return (int *)str;
}
//输出值
char *show()
{
return str;
}
//按照下标返回字符串的第几个值
char &at(int n,char &ch)
{
cout<<"返回下标值"<<endl;
ch=str[n];
return ch;
}
//设置字符串的内容
void set(const char *val)
{
if(strlen(str)>=strlen(val))
{
strcpy(str,val);
}
else
{
char *p=str;
str=new char[strlen(val)+1];
delete []p;
strcpy(str,val);
}
}
//拼接
void append(const char*p)
{
cout<<"拼接"<<"\n";
char *q=str;
str=new char[strlen(str)+strlen(p)+1];
strcat(str,p);
strcat(str,q);
delete []q;
}
private:
char*str;
int len;
};
int main()
{
char ch=0;
arr A("hello");
cout<<A.show()<<endl;
cout<<"\n";
arr B=A;
cout<<B.show()<<endl;
cout<<"\n";
arr C="world";
cout<<C.show()<<endl;
cout<<"\n";
C.at(2,ch);
cout<<ch<<endl;
cout<<"\n";
C.set("word");
cout<<C.get_addr()<<endl;
cout<<"\n";
C.append("hello");
cout<<C.show()<<endl;
return 0;
}
运行结果