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]='\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] = '\0';
    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");
}

 

posted on 2014-03-13 00:06  de0319gh  阅读(571)  评论(0编辑  收藏  举报