/*******************************************/
文件名:work4.h
/*******************************************/
#ifndef WORK4_H
#define WORK4_H
#include
#include
using namespace std;
class Mystring
{
private:
char *buf;
public:
static int count;
public:
Mystring()
{
buf = new char[1];
*buf = '\0';
count++;
}
Mystring(const char *b);
~Mystring()
{
delete[] buf;
count--;
}
void show()
{
cout<(const Mystring &R);
bool operator>=(const Mystring &R);
bool operator<=(const Mystring &R);
friend ostream & operator<<(ostream &L, const Mystring &R);
friend istream & operator>>(istream &L, Mystring &R);
};
#endif // WORK4_H
/*******************************************/
文件名:work4.cpp
/*******************************************/
#include"work4.h"
int Mystring::count = 0;
Mystring::Mystring(const char *b)
{
int len=strlen(b);
this->buf = new char[len + 1];
strcpy(this->buf, b);
count++;
}
const Mystring &Mystring::operator=(const Mystring &R)
{
delete[] buf;
buf = new char[std::strlen(R.buf) + 1];
std::strcpy(buf, R.buf);
return *this;
}
char Mystring::at(int index)
{
if (index < 0 || index >= (int)strlen(buf)) {
throw std::out_of_range("Index out of range");
}
return this->buf[index];
}
const Mystring Mystring::operator[](int index)
{
return Mystring(&buf[index]);
}
char Mystring::data()
{
return *this->buf;
}
const Mystring Mystring::c_str()
{
return *this;
}
bool Mystring::empty()
{
return "this->buf=='\0'";
}
int Mystring::size()const
{
return strlen(this->buf);
}
int Mystring::length()const
{
return size();
}
int Mystring::capacity()const
{
return strlen(this->buf)+1;
}
bool Mystring::clear()
{
delete[]this->buf;
this->buf=new char[1];
*buf='\0';
return 1;
}
bool Mystring::push_back(char s)
{
char *newBuf = new char[capacity() + 1];
std::strcpy(newBuf, this->buf);
newBuf[size()] = s;
newBuf[size() + 1] = '\0';
delete[] this->buf;
buf = newBuf;
return 1;
}
bool Mystring::pop_balck()
{
if (empty())
{
return 0;
}
char *newBuf = new char[size() + 1];
std::strncpy(newBuf, this->buf, size() - 1);
newBuf[size() - 1] = '\0';
delete[] this->buf;
buf = newBuf;
return 1;
}
bool Mystring::append(char s)
{
return push_back(s);
}
Mystring &Mystring::operator+=(const Mystring &R)
{
*this = *this + R;
return *this;
}
const Mystring Mystring::operator+(const Mystring &R)
{
Mystring temp;
temp.buf = new char[size() + R.size() + 1];
strcpy(temp.buf, buf);
strcat(temp.buf, R.buf);
return temp;
}
bool Mystring::operator==(const Mystring &R)
{
return strcmp(buf, R.buf) == 0;
}
bool Mystring::operator!=(const Mystring &R)
{
return !(*this == R);
}
bool Mystring::operator>(const Mystring &R)
{
return strcmp(this->buf, R.buf) > 0;
}
bool Mystring::operator>=(const Mystring &R)
{
return *this > R || *this == R;
}
bool Mystring::operator<=(const Mystring &R)
{
return !(*this > R);
}
ostream & operator<<(ostream &L, const Mystring &R)
{
L << R.buf;
return L;
}
istream & operator>>(istream &L, Mystring &R)
{
L>>R.buf;
return L;
}
/*******************************************/
文件名:main.cpp
/*******************************************/
#include"work4.h"
int main()
{
Mystring s1="hello";
s1.show();
Mystring s2="world!";
s2.show();
Mystring s3=s1+s2;
s3.show();
cout<>s5;
cout<=s3)<