zoukankan      html  css  js  c++  java
  • String类的实现,内部采用字符数组实现

    #include <iostream>
    using namespace std;
    
    class String{
    public:
        String(const char *str = NULL);//默认构造函数
        String(const String &str);//复制构造函数
        ~String();//析构函数
        String operator+(const String & str);//字符串连接
        String & operator=(const String &str);//字符串赋值
        bool operator==(const String &str);//判断是否字符串相等
        int Length();//获取字符串长度
        friend ostream & operator<<(ostream &o,const String &str);//重载输出
        String SubStr(int start, int end);//求子字符串(start ... end-1)
    private:
        char * charArray;
    };
    
    String::String(const char *str)
    {
        if(str == NULL){
            charArray=new char[1];
            charArray[0]='';
        }else{
            charArray=new char[strlen(str)+1];
            strcpy(charArray,str);
        }
    }
    String::String(const String &str)
    {
        charArray = new char[strlen(str.charArray)+1];
        strcpy(charArray,str.charArray);
    }
    String::~String()
    {
        delete [] charArray;
    }
    String String::operator+(const String &str)
    {
        String res;
        delete [] res.charArray;//释放原有空间
        res.charArray = new char[strlen(charArray)+strlen(str.charArray)+1];
        strcpy(res.charArray,charArray);
        strcpy(res.charArray+strlen(charArray),str.charArray);
        return res;
    }
    String & String::operator=(const String &str)
    {
        if(charArray == str.charArray)
            return *this;
        delete [] charArray;
        charArray = new char[strlen(str.charArray)+1];
        strcpy(charArray,str.charArray);
        return *this;
    }
    bool String::operator==(const String &str)
    {
        return strcmp(charArray,str.charArray) == 0;
    }
    int String::Length()
    {
        return strlen(charArray);
    }
    ostream & operator<<(ostream &o, const String &str)
    {
        o<<str.charArray;
        return o;
    }
    
    String String::SubStr(int start, int end)
    {
        String res;
        delete [] res.charArray;//释放原有内存
        res.charArray = new char[end-start+1];//重新申请内存
        for(int i=0; i+start<end; i++){
            res.charArray[i]=charArray[start+i];
        }
        res.charArray[end-start] = '';
        return res;
    }
    
    void test()
    {
        String s = "abcd";
        String t = "abcd";
        cout<<s<<(s==t?" == ":" != ")<<t<<endl;
    
        String s2 = "Hello ";
        String s3 = "China!";
        cout<<s2+s3<<endl;
        cout<<(s2+s3).SubStr(0,s2.Length()+s3.Length())<<endl;
    }
    
    int main()
    {
            test();
            system("pause");
    }
  • 相关阅读:
    B站14天数据分析笔记6次课笔记
    B站14天数据分析笔记5次课作业
    B站14天数据分析笔记5次课Pandas
    1037 在霍格沃茨找零钱 (20 point(s))
    第一章:第三节探索性数据分析
    Java没有运行选项
    Eclipse截图的时候错误提示消失/复制粘贴错误信息
    错误记录_css属性的值一定不需要引号么?
    错误记录_语法哪里错了?
    微软输入法使用
  • 原文地址:https://www.cnblogs.com/de0319gh/p/3597631.html
Copyright © 2011-2022 走看看