自定義類(lèi)_string類(lèi)

字號(hào):

#include "string.h"
    #define TRIM_LEFT 1
    #define TRIM_RIGHT 2
    #define TRIM_BOTH 0
    class string
    {
    public:
    string();
    string( const char *src );
    string( string &src );
    ~string();
    //操作符重載
    void operator = ( const char *src );
    //char * operator + ( string &add2 );
    string operator + ( string &add2 );
    operator char *();
    //成員函數(shù)
    const char *ToString();
    char GetAt( int index );
    int Len();
    int FindFirstSub( string substr , int start );
    bool InStr( string substr );
    string Trim( int part );
    string Left( int sublen );
    string Right( int sublen );
    string Mid( int start , int sublen );
    void Replace( string strNeedReplaced , string strReplace );
    private:
    char *str;
    int len;
    };
    ////////////////////////////////////////////////////////////
    // string類(lèi)實(shí)現(xiàn)部分
    // 時(shí)間: 2005-11-2
    // 程序員: 黃江斌
    ////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////
    // string在構(gòu)造、析構(gòu)函數(shù)
    // string()
    // string( const char *src )
    // string( string &src )
    // ~string()
    string::string()
    {
    len = 0;
    str = new char(len+1);
    str[0] = 0;
    }
    string::string( const char *src )
    {
    len = strlen(src);
    str = new char(len+1);
    strcpy( str , src );
    }
    string::string( string &src )
    {
    len = src.Len();
    str = new char(len+1);
    strcpy( str , (char*)src );
    }
    string::~string()
    {
    }
    ////////////////////////////////////////////////////////////
    // string類(lèi)操作符重載
    // string operator = ( const char *src )
    // string operator + ( string &add2 )
    // operator char *()
    void string::operator = ( const char *src )
    {
    len = strlen(src);
    str = new char(len+1);
    strcpy( str , src );
    }
    string string::operator + ( string &add2 )
    {
    int len2 = add2.Len();
    int len0 = len + len2;
    char *str0 = new char(len0+1);
    strcpy( str0 , str );
    strcat( str0 , (char*)add2 );
    string sum(str0);
    return sum;
    }
    string::operator char *()
    {
    return str;
    }
    ////////////////////////////////////////////////////////////
    // string類(lèi)功能函數(shù)
    // const char *ToString()
    // char GetAt( int index )
    // int Len()
    // int FindFirstSub( string substr , int start = 0 )
    // bool InStr( string substr )
    // string Trim( int part )
    // string Left()
    // string Right()
    // string Mid()
    // void Replace( string strNeedReplaced , string strReplace )
    const char *string::ToString()
    {
    return str;
    }
    //
    //得到內(nèi)存編號(hào)為index的字符
    char string::GetAt( int index )
    {
    return str[index];
    }
    //
    //得到字符串的長(zhǎng)度
    int string::Len()
    {
    return len;
    }
    //
    //得到start后(包括start)子串substr的內(nèi)存編號(hào)
    int string::FindFirstSub( string substr , int start = 0 )
    {
    if( start > len )
     return -1;
    for( int i = start ; i <= len - substr.Len() ; i++ )
    {
     if( str[i] == substr.GetAt(0) )
     {
     bool flag = true;
     int j;
     for( j = 0 ; flag && j < substr.Len() && (i + j < len) ; j++ )
     {
     if( str[i+j] != substr.GetAt(j) )
     flag = false;
     }
     if( j >= substr.Len() && flag )
     {
     return i;
     }
     }
    }
    return -1;
    }
    //
    //判斷字符串substr是否字符串的子串