当前位置:C++技术网 > 资讯 > 深入分析string模版

深入分析string模版

更新时间:2015-06-27 19:52:37浏览次数:1+次

//String.h的程序代码如下:
#include <iostream>
using namespace std;
class String 
{
public:
    String();     //默认构造函数用于创建空字符串
    ~String();
    String(const String&rs);
    String(const char*const ch); //带一个参数的构造函数用来初始化字符串
    char&operator[](unsigned short int length);
    char operator[](unsigned short int length)const;
    String&operator=(const String&s);  //赋值函数用于两个字符串之间的赋值
    String operator+(const String &);
    void operator+=(const String&rs);
    friend ostream &operator<<(ostream & o, const String &str)
    {
        o<<str.str;
        return o;
    }
    friend istream &operator>>(istream&i, String &str)
    {
        i>>str.str;
        return i;
    }
    friend bool operator<(const String&str1,const String &str2)
    {
        if(strcmp(str1.str,str2.str)<0)
            return 1;
        else
            return 0;
    }
    friend bool operator>(const String&str1,const String &str2)
    {
        if(strcmp(str1.str,str2.str)>0)
            return 1;
        else
            return 0;
    }
    friend bool operator==(const String&str1,const String &str2)
    {
        if(strcmp(str1.str,str2.str)==0)
            return 1;
        else
            return 0;
    }
    unsigned short int getlen()const{return len;}
    const char*getstr()const{return str;}
private:
    String(unsigned short int);
    unsigned short int len;
    char*str; 
};
String::String(unsigned short int length)
{
    str=new char[length+1];
    int i;
    for(i=0;i<=length;i++)
        str[i]='\0';
    len=length;
}
String::String()
{
    len=0;
    str=new char[1];
    str[0]='\0';
}
String::~String()
{
    delete []str;
    len=0;
}
String::String(const String&rs)
{
    len=rs.getlen();
    str=new char[len+1];
    for(int i=0;i<len;i++)
        str[i]=rs[i];
    str[len]='\0';
}
String::String(const char*const ch)
{
    len=strlen(ch);
    str=new char[len+1];
    for(int i=0;i<len;i++)
        str[i]=ch[i];
    str[len]='\0';
}
char&String::operator[](unsigned short int length)
{
    if(length>len)
        return str[len-1];
    else
        return str[length];
}
char String::operator[](unsigned short int length)const
{
    if (length>len)
    {
        return str[len-1];
    }
    else
        return str[length];
}
String&String::operator=(const String&s)
{
    if (this==&s)
        return *this;
    delete[]str;
    len=s.getlen();
    str=new char[len+1];
    for(int i=0;i<len;i++)
    {
        str[i]=s[i];
    }
    str[len]='\0';
    return *this;
}
String String::operator+(const String&rs)
{
    int total=len+rs.getlen();
    String temp(total);
    int i,j;
    for( i=0;i<len;i++)
        temp[i]=str[i];
    for( j=0;j<rs.getlen();j++,i++)
        temp[i]=rs[j];
    temp[total]='\0';
    return temp;
}
void String::operator+=(const String&rs)
{
    int total=len+rs.getlen();
    String temp(total);
    int i,j;
    for(i=0;i<len;i++)
        temp[i]=str[i];
    for(j=0;j<rs.getlen();j++,i++)
        temp[i]=rs[j];
    temp[total]='\0';
    *this=temp;
}