1.自己封装string类
mystring.h
#ifndef MYSTRING_H
#define MYSTRING_H
#include <iostream>
#include <string.h>
using namespace std;
class myString
{
char *str;//字符串
unsigned long size;//实际大小
public:
myString();//无参构造
myString(const char *s);//有参构造
~myString();//析构
myString(const myString &s);//拷贝构造
bool expansion(unsigned long size);//扩容
myString& operator=(const myString &s);//拷贝赋值
bool isempty();//判空
unsigned long length();//字符串长度
const char *c_str();//返回char字符串
char &at(int pos);//at
const myString operator+(const myString &s)const;//+运算符重载
myString& operator+=(const myString &s);//+=运算符重载
bool operator>(const myString &s)const;//>运算符重载
friend ostream& operator << (ostream& output,const myString &s);
};
#endif // MYSTRING_H
mystring.cpp
#include "mystring.h"
myString::myString():size(15)
{
str = new char[size];
strcpy(str,"");
}
myString::myString(const char *s)
{
size = strlen(s)+1;
str = new char[size];
strcpy(str,s);
}
myString::~myString()
{
delete [] str;
}
myString::myString(const myString &s)
{
size = s.size;
str = new char[size];
strcpy(str,s.str);
}
bool myString::expansion(unsigned long size)
{
this->size = 2*this->size>size?2*this->size:size;
char *t = new char[this->size];
strcpy(t,str);
delete [] str;
str = t;
return 1;
}
myString &myString::operator=(const myString &s)
{
if(strlen(s.str)+1>size) expansion(strlen(s.str)+1);
strcpy(str,s.str);
return *this;
}
bool myString::isempty()
{
return !strlen(str);
}
unsigned long myString::length()
{
return strlen(str);
}
const char *myString::c_str()
{
return str;
}
char &myString::at(int pos)
{
return str[pos];
}
const myString myString::operator+(const myString &s) const
{
return myString(strcat(str,s.str));
}
myString &myString::operator+=(const myString &s)
{
if(strlen(str)+strlen(s.str)+1>size) expansion(strlen(str)+strlen(s.str)+1);
strcat(str,s.str);
return *this;
}
bool myString::operator>(const myString &s) const
{
return strcmp(str,s.str)>0;
}
ostream& operator <<(ostream &output,const myString &s)
{
output<<s.str;
return output;
}
思维导图