head.h
#ifndef __HEAD_H__
#define __HEAD_H__
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
class myString
{
private:
char *str; //记录c风格的字符串
int size; //记录字符串的实际长度
public:
//无参构造
myString();
//有参构造
myString(const char *s);
//拷贝构造
myString(const myString &s);
//析构函数
~myString();
//判空函数
bool isEmpty();
//置空函数
void setEmpty();
//size函数
int getSize();
//c_str函数
const char * my_str();
//at函数
char &at(int pos);
//赋值函数
myString & operator=(const myString &other);
//operator[]
char operator[](const int i);
//operator+
myString operator+(const myString &other);
//operator==
bool operator==(const myString &other);
//operator!=
bool operator!=(const myString &other);
//operator<
bool operator>(const myString &other);
//operator>
bool operator<(const myString &other);
//operator<=
bool operator<=(const myString &other);
//operator>=
bool operator>=(const myString &other);
//operator<<
friend ostream & operator<<(ostream &L,const myString &other);
//operator>>
friend istream &operator>>(istream &L,myString &other);
};
#endif
function.h
#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 &s) //string s("hello world")
{
strcpy(this->str,s.str);
this->size = s.size;
}
myString::~myString()
{
delete this->str;
}
bool myString::isEmpty()
{
return size == 0;
}
void myString::setEmpty()
{
this->str[0] = '\0';
this->size = 0;
}
int myString::getSize()
{
return this->size;
}
//c_str函数
const char * myString::my_str()
{
return this->str;
}
char &myString::at(int pos)
{
if(pos <= 0 || pos >= this->size)
{
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);
}
return this->str[pos];
}
//赋值函数
myString & myString::operator=(const myString &other)
{
if(&other != this){
this->size = other.size;
strcpy(this->str , other.str);
}
return *this;
}
//operator[]
char myString::operator[](const int i){
return this->str[i];
}
//operator+
myString myString::operator+(const myString &other)
{
myString b;
strcpy(b.str,this->str);
b.size = this->size;
strcat(b.str,other.str);
b.size = other.size;
return b;
}
//operator==
bool myString::operator==(const myString &other)
{
return !strcmp(this->str,other.str);
}
//operator!=
bool myString::operator!=(const myString &other)
{
return strcmp(this->str,other.str);
}
//operator<
bool myString::operator>(const myString &other)
{
return strcmp(this->str,other.str) > 0;
}
//operator>
bool myString::operator<(const myString &other)
{
return strcmp(this->str,other.str) < 0;
}
//operator<=
bool myString::operator<=(const myString &other)
{
return strcmp(this->str,other.str) <= 0;
}
//operator>=
bool myString::operator>=(const myString &other)
{
return strcmp(this->str,other.str) >= 0;
}
//operator<<
ostream &operator<<(ostream &L,const myString &other)
{
L << other.str;
return L;
}
//operator>>
istream &operator>>(istream &L,myString &other)
{
L >> other.str;
return L;
}