#include <iostream>
#include <cstring>
using namespace std;
class myString
{
private:
char *str; //记录c风格的字符串
int size; //记录字符串的实际长度
public:
//无参构造
myString():size(10)
{
str = new char[size]; //构造出一个长度为10的字符串
strcpy(str,"");
}
//有参构造
myString(const char *s) //string s("hello world")
{
size = strlen(s);
str = new char[size+1];
strcpy(str, s);
}
//拷贝构造
myString(const myString &other):size(other.size)
{
str = new char[other.size+1];
strcpy(str,other.str);
}
//析构函数
~myString()
{
delete str;
//cout<<"析构函数"<<endl;
}
//判空函数
bool empty()
{
if(!strlen(str))
return true;
else
return false;
}
//s_size函数
int s_size()
{
return size;
}
//c_str函数
char *c_str()
{
return str;
}
//at函数
char &at(int pos)
{
if(pos<size && pos>=0)
return *(str+pos);
cout<<"越界访问"<<endl;//没有返回值报警告
}
};
int main()
{
//无参构造
myString s1;
char *s2 = s1.c_str();//c_str函数
cout<<"s1=s2="<<s2<<endl;
//有参构造
myString s3("hello");
char *s4 = s3.c_str();//c_str函数
cout<<"s3=s4="<<s4<<endl;
//拷贝构造
myString s5(s3);
char *s6 = s5.c_str();//c_str函数
cout<<"s5=s6="<<s6<<endl;
//at函数
cout<<s5.at(1)<<endl;
s5.at(0) = 'H';
char *s7 = s5.c_str();//c_str函数
cout<<"s7 = "<<s7<<endl;
cout<<s5.at(8)<<endl;//使用at函数越界访问
//s_size函数
cout<<s5.s_size()<<endl;
//判空
cout<<"s5是否为空:"<<boolalpha<<s5.empty()<<endl;
cout<<"s1是否为空:"<<boolalpha<<s1.empty()<<endl;
return 0;
}
封装一个myString类
于 2023-05-10 19:03:13 首次发布
本文展示了如何在C++中创建一个名为myString的自定义字符串类,包括无参构造、有参构造、拷贝构造函数以及析构函数的实现。类中包含了判断字符串是否为空、获取字符串长度、获取C风格字符串指针及访问字符串特定位置元素的方法。代码示例演示了类的使用,如创建对象、调用成员函数等。
摘要由CSDN通过智能技术生成