ANSI字符串類String的實現(xiàn)及使用

字號:

和C#不一樣,C和C++的內(nèi)部都沒有字符串數(shù)據(jù)類型,但是我們可以用C++建立一個實現(xiàn)字符串相關(guān)操作的類型:String
    下面的程序分成兩個部分:
    (1)String類:類頭String.h和類實現(xiàn)String.cpp
    (2)String類使用演示程序Main.cpp
    類頭文件String.h代碼如下:
    #ifndef STRING_H
    #define STRING_H
    #include
    using namespace std;
    class String
    {
    friend ostream & operator<<(ostream & output, const String & s);
    friend istream & operator>>(istream & input, String & s);
    public:
    String(const char* = "");
    String(const String &);
    ~String();
    const String & operator=(const String &); //賦值
    String & operator+=(const String &); //字符串連接
    int operator!() const; //String為空?
    int operator==(const String &) const; //測試s1==s2
    int operator!=(const String &) const; //測試s1!=s2
    int operator<(const String &) const; //測試s1    int operator>(const String &) const; //測試s1>s2
    int operator<=(const String &) const; //測試s1<=s2
    int operator>=(const String &) const; //測試s1>=s2
    char & operator[](int); //返回對字符的引用
    String & operator()(int, int); //返回一個子字符串
    int GetLength() const; //返回字符串的長度,不包括結(jié)尾的\0
    private:
    char* sPtr; //指向字符串起始位置的指針
    int length; //字符串的長度
    };
    #endif
    類實現(xiàn)文件String.cpp代碼如下:
    #include
    #include
    #include
    #include "String.h"
    ostream & operator<<(ostream & output, const String & s)
    {
    output<    return output;
    }
    istream & operator>>(istream & input, String & s)
    {
    static char temp[100];
    input>>temp;
    s = temp;
    return input;
    }
    String::String(const char * s)
    {
    cout<<"Convention constructor:"<    length = strlen(s);
    sPtr = new char[length+1];
    assert(sPtr!=0);
    strcpy(sPtr, s);
    }
    String::String(const String & copy)
    {
    cout<<"Copy constructor:"<    length = copy.length;
    sPtr = new char[length+1];
    assert(sPtr != 0);
    strcpy(sPtr, copy.sPtr);
    }
    String::~String()
    {
    cout<<"Destructor:"<    delete[] sPtr;
    }
    const String & String::operator=(const String & right)
    {
    cout<<"operator = called"<