字符串类的创建(上)

Posted 为了财务自由!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串类的创建(上)相关的知识,希望对你有一定的参考价值。



接下来为DragonLib创建字符串类:



#include "dtstring.h"
#include <cstring>
#include <cstdlib>
#include "Exception.h"

using namespace std;


namespace DragonLib 

void String::init(const char* s)

    m_str = strdup(s);
    if(m_str)
    
        m_length = strlen(m_str);
    
    else
    
        THROW_EXCEPTION(NoEnoughMemoryException,"No memory to create String object...\\n");
    


String::String()

    init("");


String::String(char c)

    char s[] = c,'\\0';
    init(s);


String::String(const char* s)

    init(s ? s : "");


String::String(const String& s)

    init(s.m_str);


int String::length() const

    return m_length;


const char* String::str() const

    return m_str;


bool String::operator==(const String& s)const

    return (strcmp(m_str,s.m_str)==0);


bool String::operator==(const char* s)const

    return (strcmp(m_str,s)==0);


bool String::operator!= (const String& s) const

    return !(*this == s);

bool String::operator!= (const char* s)const

    return !(*this == s);


bool String::operator> (const String& s) const

    return (strcmp(m_str,s.m_str) > 0);

bool String::operator> (const char* s)const

    return (strcmp(m_str,s?s:"") > 0);

bool String::operator< (const String& s) const

    return (strcmp(m_str,s.m_str) < 0);

bool String::operator< (const char* s)const

    return (strcmp(m_str,s?s:"") < 0);

bool String::operator>= (const String& s) const

    return (strcmp(m_str,s.m_str) >= 0);

bool String::operator>= (const char* s)const

    return (strcmp(m_str,s?s:"") >= 0);

bool String::operator<= (const String& s) const

    return (strcmp(m_str,s.m_str) <= 0);

bool String::operator<= (const char* s)const

    return (strcmp(m_str,s?s:"") <= 0);


String String::operator+ (const String& s)const

    return (*this + s.m_str);

String String::operator+ (const char* s)const

    String ret;
    int len = m_length + strlen(s?s:"");
    char* str = reinterpret_cast<char*>(malloc(len+1));

    if(str)
    
        strcpy(str,m_str);
        strcat(str,s?s:"");
        free(ret.m_str);
        ret.m_str=str;
        ret.m_length=len;
    
    else
    
        THROW_EXCEPTION(NoEnoughMemoryException,"No memory to add String values...\\n");
    
    return ret;


String& String::operator+= (const String& s)

    return (*this = *this + s);

String& String::operator+= (const char* s)

    return (*this = *this + s);


String& String::operator= (const String& s)

    return (*this = s.m_str);

String& String::operator= (const char* s)

    if(m_str != s)
    
        char* str=strdup(s?s:"");
        if(str)
        
            free(m_str);
            m_str=str;
            m_length = strlen(m_str);
        
        else
        
            THROW_EXCEPTION(NoEnoughMemoryException,"No memory to assign new String value...\\n");
        
    
    return *this;

String& String::operator= (char c)

    char s[] = c,'\\0';
    return (*this = s);

String::~String()

    free(m_str);


以上是关于字符串类的创建(上)的主要内容,如果未能解决你的问题,请参考以下文章

数据结构(09)_字符串类的实现

字符串类的创建

从字符串创建 React 类的实例

如何从包含该类名称的字符串创建一个类的对象?

JS类的创建与继承

Java基础语法 - 可变字符串 StringBuffer