//无参构造 }
//有参构造
//拷贝构造
//析构函数
//判空函数
//size函数
//c_str函数
//at函数
mystring.h
#ifndef MYSTRING_H
#define MYSTRING_H
#include<iostream>
using namespace std;
class Mystring
{
public:
Mystring();
Mystring(const char *s);
Mystring(const Mystring &other); //拷贝拷贝
bool empty(); //判空函数
int str_size();
string c_str();
char &at(int pos);
~Mystring();
private:
char *str;
int size;
};
#endif // MYSTRING_H
mystring.cpp
#include "mystring.h"
#include<iostream>
#include<cstring>
using namespace std;
Mystring::Mystring():size(10)
{
str = new char[size];
strcpy(str," ");
}
Mystring::Mystring(const char *s)
{
size = strlen(s);
str = new char[size+1];
strcpy(str,s);
}
Mystring::Mystring(const Mystring &other):size(other.size)
{
str = new char[other.size];
strcpy(str,other.str);
}
bool Mystring::empty()
{
return !strlen(str);
}
int Mystring::str_size()
{
return size;
}
string Mystring::c_str()
{
return this->str;
}
char & Mystring::at(int pos)
{
if(pos < 0 || pos >= size)
{
throw std::out_of_range("Index out of range");
}
char &s = str[pos];
return s;
}
Mystring::~Mystring()
{
delete []str;
}
main.cpp
#include <iostream>
#include "mystring.h"
using namespace std;
int main()
{
Mystring s1;
Mystring s2("hello");
Mystring s3(s2);
cout << "s2 = " << s2.c_str() << endl;
cout << "s3 = " << s3.c_str() << endl;
cout << "s2.size = " << s2.str_size() << endl;
for(int i = 0; i < s2.str_size(); i++)
{
cout << s2.at(i) << endl;;
}
if(!s1.empty())
{
s1.at(0) = 'w';
s1.at(1) = 'o';
s1.at(2) = 'r';
s1.at(3) = 'l';
s1.at(4) = 'd';
cout << "s1 = " << s1.c_str()<< endl;
}
return 0;
}