c++实现的一个数组串

数组串类ArrayString源码:

#pragma once

class ArrayString
{

public:

    //构造函数
    ArrayString(void)
    {
        maxSize = 100;
        list = new char[maxSize];
        for(int i=0;i<maxSize;i++)
            list[i] = '';
    }

    //带参构造函数
    ArrayString(char * s)
    {
        maxSize = 100;
        list = new char[maxSize];
        int i;
        *this = s;  //运算符=重载,用char串赋值
    }

    //获取串的长度
    int GetLength()
    {
        int length = 0;
        while(list[length++]!='');
        return length-1;
    }

    //返回字符串的内容
    char * ToString()
    {
        return list;
    }

    //用char串赋值
    void operator=(char * s2)
    {
        int i ;
        for(i=0;s2[i]!='';i++)
            list[i] = s2[i];
        list[i] = '';
    }

    //用ArrayString赋值
    void operator=(ArrayString * s2)
    {
        int i ;
        for( i=0;s2->list[i]!='';i++)
            list[i] = s2->list[i];
        list[i] = '';
    }

    //将s2拼接到ArrayString后面
    void Concat(ArrayString s2)
    {
        int len1 = this->GetLength();
        int len2 = s2.GetLength();

        if(len1+len2>maxSize-1)
            return;

        for(int i = len1;i<len1+len2&&i<maxSize-1;i++)
            this->list[i]=s2.list[i-len1];
        list[len1+len2] = '';
    }

    //求子串
    ArrayString * SubStr(int index,int length)
    {
        ArrayString * s = new ArrayString();

        if(index>=0&&index+length<=GetLength())
        {
            for(int i =0;i<length;i++)
                s->list[i]=list[index+i];
            s->list[length] = '';
        }

        return s;
    }

    //比较串的大小
    int Compare(ArrayString s2)
    {
        int i =0;
        while(list[i]==s2.list[i]&&list[i]!='')
            i++;

        if(list[i]<s2.list[i])
            return -1;
        else if(list[i]>s2.list[i])
            return 1;

        return 0;
    }

    //求子串在主串中的位置
    int IndexOf(ArrayString s2)
    {
        if(s2.GetLength()>this->GetLength())
            return -1;

        int i;
        char f = s2.list[0];
        for(i=0;i<=this->GetLength()-s2.GetLength();i++)
        {
            if(this->list[i]==f)
                if(s2.Compare(*SubStr(i,s2.GetLength()))==0)
                    return i;
        }

        return -1;
    }

    //串的插入
    void Insert(int index,ArrayString s2)
    {
        if(this->GetLength()+s2.GetLength()>maxSize)
            return;  //超出数组最大容量
        if(index>this->GetLength())
            return;  //插入位置超出数组长度

        //从主串中index位置开始把后面的截取拼接到s2后面
        s2.Concat(*SubStr(index,this->GetLength()-index));
        
        //将主串index之前的截取出来再复值给主串
        *this = *this->SubStr(0,index);
        //将s2拼接到主串后面
        this->Concat(s2);
    }

    //串的删除
    void Delete(int index,int length)
    {
        if(index>=this->GetLength())
            return;
        if(index+length>this->GetLength())
            return;

        ArrayString * rear = SubStr(index+length,this->GetLength()-index-length);
        *this = *this->SubStr(0,index);
        this->Concat(*rear);
    }

    //将主串中的指定段用指定的新字符串替换
    void Replace(int index,int length, ArrayString s2)
    {
        Delete(index,length);
        Insert(index,s2);
    }


    ~ArrayString(void)
    {
    }

private:
    int maxSize;
    char *list;
};

测试代码:

char * str = "asdfsdfsdfsdfsdf";
    ArrayString *str1 = new ArrayString("abcdefghijklmn");
    ArrayString *str2 = new ArrayString("def");
    //*str1 = str;  //测试char赋值
    //*str1 = str2; //测试ArrayString赋值

    //std::cout<<str1->GetLength()<<std::endl; //测试获取长度

    //str1->Concat(*str2);      //测试拼接
    //str1=str1->SubStr(3,3);   //测试求子串

    //int t = str1->Compare(*str2);  //测试字符串的比较
    //std::cout<<t<<std::endl;

    //int n = str1->IndexOf(*str2);  //测试求子串在主串中的位置
    //std::cout<<n<<std::endl;

    //str1->Insert(3,*str2);  //测试串的插入

    //str1->Delete(3,3);   //测试删除

    str1->Replace(2,5,*str2); //测试替换

    std::cout<<str1->ToString()<<std::endl;
原文地址:https://www.cnblogs.com/xiayangqiushi/p/3341227.html