function
#include "head.h"
//无参构造
myString::myString():size(10)
{
str = new char[size]; //构造出一个长度为10的字符串
strcpy(str,"");
}
//有参构造
myString::myString(const char *s) //string s("hello world")
{
if(NULL == s)
{
perror("terminate called after throwing an instance of 'std::logic_error'what():\n basic_string::_M_construct null not valid");
exit(0);
}
size = strlen(s);
str = new char[size+1];
strcpy(str, s);
}
//拷贝构造
myString::myString(const myString & newstr)
{
strcpy(this->str , newstr.str);
this->size = newstr.size;
}
//析构函数
myString::~myString()
{
delete this->str;
cout << "析构函数" << endl;
}
//赋值函数
myString & myString::operator=(const myString &other)
{
if(&other != this){
this->size = other.size;
strcpy(this->str , other.str);
}
return *this;
}
//判空函数
int myString::isEmpty()
{
if(str[0] == '\0')
return 1;
return 0;
}
//置空函数
int myString::setEmpty()
{
str[0] = '\0';
this->size = 0;
return 0;
}
//size函数
int myString::getSize(const char * str)
{
int len = 0;
while(str++)
len++;
return len;
}
//c_str函数
const char * myString::my_str()
{
char *b = NULL;
strcpy(b,this->str);
const char * t = b;
return t;
}
//at函数
char & myString::at(int pos)
{
if(pos>=this->size || pos < 0)
{
perror("terminate called after throwing an instance of 'std::out_of_range'what():\n basic_string::at: __n (which is 18446744073709551615) >= this->size() (which is 3)");
exit(0);
}
char &c = this->str[pos];
return c;
}
//打印
void myString::pn()
{
cout << this->str << endl;
}
head.h
#ifndef __HEAD_H__
#define __HEAD_H__
#include <iostream>
#include <cstring>
using namespace std;
class myString
{
private:
char *str; //记录c风格的字符串
int size; //记录字符串的实际长度
public:
myString();
myString(const char *s);
myString(const myString & newstr);
~myString();
myString & operator=(const myString &other);
int isEmpty();
int setEmpty();
int getSize(const char * str);
const char * my_str();
char &at(int pos);
void pn();
};
#endif