自己实现一把String类

本文介绍了一个简单的自定义String类的实现,包括构造函数、赋值运算符重载及比较等基本功能。通过C++代码展示了如何管理和操作字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        好几次在笔试中要求写String类,我也都写了,但是从来没有完整的整理过,每次都是做题的时候写一写,笔试完了就忘了。今天忽然想起了,自己写了一点点。也只是简单测试了一下,欢迎拍砖。
#include <iostream>
#include 
<string.h>
using namespace std;

class MyString
{
public:
    MyString();
    
~MyString(){}
    MyString(
const char* str);
    MyString(MyString 
& str);
    MyString 
& operator=(const MyString & str);
    MyString 
& operator=(const char * c_str);

    
char operator[](const unsigned int index);

    MyString operator
+(const MyString & str);
    MyString operator
+(const char *);
    MyString operator
+=(const MyString & str);
    MyString operator
+=(const char * c_str);
    bool operator
>(const MyString &str);
    bool operator
>(const char * c_str);
    bool operator
>=(const MyString &str);
    bool operator
>=(const char * c_str);
    bool operator
<(const MyString &str);
    bool operator
<(const char * c_str);
    bool operator
<=(const MyString & str);
    bool operator
<=(const char * c_str);
    bool operator
==(const MyString & str);
    bool operator
==(const char * c_str);
    bool operator
!=(const MyString & str);
    bool operator
!=(const char * c_str);

    friend ostream 
& operator<<(ostream &ostr, MyString & str);
    friend istream 
& operator>>(istream &istr, MyString & str);
    friend MyString operator
+(char * c_str, MyString & str);
    friend MyString operator
!=(char * c_str, MyString & str);
    friend bool operator
>(const char * c_str, const MyString & str);
    friend bool operator
>=(const char * c_str, const MyString &str);
    friend bool operator
<(const char * c_str, const MyString &str);
    friend bool operator
<=(const char *c_str, const MyString & str);
    friend bool operator
==(const char * c_str, const MyString & str);
    friend bool operator
!=(const char * c_str, const MyString & str);

public:
    
char* getString() const;
    
int getSize() const;

private:
    
char * m_string;
    unsigned 
int m_size;
};

int MyString::getSize() const
{
    
return m_size;
}

char * MyString::getString() const
{
    
return m_string;
}

MyString::MyString()
{
    m_string 
= new char[1];
    m_string[
0= '';
    m_size 
= 0;
}

MyString::MyString(
const char * c_str)
{
    m_size 
= (unsigned int)strlen(c_str);
    m_string 
= new char[m_size+1];
    strcpy(m_string, c_str);
}

MyString::MyString(MyString 
&str)
{
    m_size 
= str.getSize();
    m_string 
= new char (m_size + 1);
    strcpy(m_string, str.getString());
}

MyString 
& MyString::operator =(const char *str)
{
    
if (strcmp(str, m_string) == 0)
        
return *this;
    
if (m_string)
        delete [] m_string;
    m_size 
= (unsigned int)strlen(str);
    m_string 
= new char(m_size + 1);
    strcpy(m_string, str);
    
return *this;
}

MyString 
& MyString::operator=(const MyString & str)
{
    
if (strcmp(str.getString(), m_string) == 0)
    {
        
return * this;
    }
    
if (m_string)
        delete m_string;
    m_size 
= str.getSize();
    m_string 
= new char (m_size + 1);
    strcpy(m_string, str.getString());
    
return * this;
}


char MyString::operator [](unsigned int index)
{
    
if (index > m_size)
    {
        index 
= m_size - 1;
    }
    
return m_string[index];
}

MyString MyString::operator
+(const MyString & str)
{
    
int i = m_size + str.getSize() + 1;
    
char * p = new char (i);
    strcpy(p, m_string);
    strcat(p, str.getString());
    
return MyString(p);
}

MyString MyString::operator 
+(const char * c_str)
{
    size_t i 
= strlen(c_str) + m_size + 1;
    
char * p = new char ((int)i);
    strcpy(p, m_string);
    strcat(p, c_str);
    
return MyString(p);
}

MyString MyString::operator 
+=(const char *str)
{
    strcpy(m_string, str);
    
return * this;
}

MyString MyString::operator 
+=(const MyString &str)
{
    strcpy(m_string, str.getString());
    
return * this;
}

bool MyString::operator 
>(const char *str)
{
    
return (strcmp(m_string, str) < 0);
}

bool MyString::operator
>(const MyString & str)
{
    
return (strcmp(m_string, str.getString())>0);
}

bool MyString::operator
>=(const char * c_str)
{
    
return (strcmp(m_string, c_str)>=0);
}

bool MyString::operator
>=(const MyString & str)
{
    
return (strcmp(m_string, str.getString())>=0);
}

bool MyString::operator
<(const char * c_str)
{
    
return (strcmp(m_string, c_str)<0);
}

bool MyString::operator
<(const MyString & str)
{
    
return (strcmp(m_string, str.getString()) < 0);
}

bool MyString::operator
<=(const char * c_str)
{
    
return (strcmp(m_string, c_str)<=0);
}

bool MyString::operator
<=(const MyString &str)
{
    
return (strcmp(m_string, str.getString()) == 0);
}

bool MyString::operator
==(const char * c_str)
{
    
return (strcmp(m_string, c_str)==0);
}

bool MyString::operator
==(const MyString & str)
{
    
return (strcmp(m_string, str.getString()) == 0);
}

bool MyString::operator 
!=(const char * c_str)
{
    
return (strcmp(m_string, c_str) != 0);
}

bool MyString::operator 
!=(const MyString &str)
{
    
return (strcmp(m_string, str.getString()) != 0);
}

// Friend Function
ostream & operator<<(ostream &ostr, MyString & str)
{
    ostr
<<str.getString();
    
return ostr;
}

istream 
& operator>>(istream & istr, MyString &str)
{
    
char tmp[255]; 
    istr
>>tmp;
    str 
= tmp;
    
return istr;
}

MyString operator
+(char * c_str, MyString & str)
{
    
int new_size = strlen(c_str) + str.getSize() + 1;
    
char * newStr = new char [new_size];
    strcpy (newStr, c_str);
    strcat (newStr, str.getString());

    
return MyString(newStr);
}

bool operator
!=(const char * c_str, MyString & str)
{
    
return (strcmp(c_str, str.getString()) != 0);
}

bool operator
>(const char * c_str, const MyString & str)
{
    
return (strcmp(c_str, str.getString()) > 0);
}
bool operator
>=(const char * c_str, const MyString &str)
{
    
return (strcmp(c_str, str.getString()) > 0);
}
bool operator
<(const char * c_str, const MyString &str)
{
    
return (strcmp(c_str, str.getString()) < 0);
}
bool operator
<=(const char *c_str, const MyString & str)
{
    
return (strcmp(c_str, str.getString()) <= 0);
}
bool operator
==(const char * c_str, const MyString & str)
{
    
return (strcmp(c_str, str.getString()) == 0);
}
bool operator
!=(const char * c_str, const MyString & str)
{
    
return (strcmp(c_str, str.getString()) != 0);
}

bool operator
>(char * c_str, const MyString & str)
{
    
return (strcmp(c_str, str.getString()) > 0);
}

 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值