zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    not syncing: Attempted to kill init
    PhpStudy如何开启Apache的gzip压缩功能?
    去掉桌面图标快捷箭头
    PS中10种样式操作
    Mysql数据库报错1264
    宝塔建站
    VB错误说明
    Flash的swf文件破解
    PS快捷键
    Mysql双向同步热备份设置
  • 原文地址:https://www.cnblogs.com/xiayangqiushi/p/3341227.html
Copyright © 2011-2022 走看看