• 自己模拟写C++中的String类型


    下面是模拟实现字符串的相关功能,它包括一下功能:
        String(const char * s);//利用字符串来初始化对象
        String();      //默认构造函数
        String(const String & s);//复制构造函数,利用String类型来初始化对象
        ~String();      //析构函数
        int length();      //返回String类型中字符串的长度
        String & operator=(const String & s);//重载=运算符。
        String & operator=(const char *);
        char & operator[](int i);  //重载【】运算符
        const char & operator[](int i) const;
        friend bool operator<(const String & st,const String & st2);//重载<运算符,用来比较String类型中字符串的大小。
        friend bool operator>(const String & st,const String & st2);
        friend bool operator==(const String & st,const String & st2);//重载==运算符,判断两个String对象是否相等
        friend ostream & operator<<(ostream & os,const String & st2);//重载输出函数
        friend istream & operator>>(istream & is,String & st2);//重载输入函数
        static int HowMang()//返回总共生成的String类对象的数目。

    String.h:

    #ifndef STRING_H_INCLUDED
    #define STRING_H_INCLUDED
    #include"iostream"
    #include<string.h>
    using std::ostream;
    using std::istream;
    class String{
    private:
        char * str;
        int len;
    public:
        static int num_strings;
        static const int CINLM=80;
        String(const char * s);
        String();
        String(const String & s);
        ~String();
        int length();
        String & operator=(const String & s);
        String & operator=(const char *);
        char & operator[](int i);
        const char & operator[](int i) const;
        friend bool operator<(const String & st,const String & st2);
        friend bool operator>(const String & st,const String & st2);
        friend bool operator==(const String & st,const String & st2);
        friend ostream & operator<<(ostream & os,const String & st2);
        friend istream & operator>>(istream & is,String & st2);
        static int HowMang()
        {
            return num_strings;
    
        }
    };
    
    
    #endif // STRING_H_INCLUDED

    String.cpp:

    #include<iostream>
    #include"String.h"
    #include"string.h"
    using namespace std;
    int String::num_strings=0;
    int String::length()
    {
        return this->len;
    }
        String::String(const char * s)
        {
            len=strlen(s);
            str=new char[len+1];
            num_strings++;
        }
        String::String()
        {
            str=0;
            len=0;
            num_strings++;
        }
    
        String::String(const String & s)
        {
            num_strings++;
            len=strlen(s.str);
            str=new char[len+1];
            strcpy(str,s.str);
        }
        String::~String()
        {
            --num_strings;
            delete [] str;
            len=0;
        }
        String & String::operator=(const String & s)
        {
            if(this==&s)
                return *this;
            delete [] str;
            len=strlen(s.str);
            str=new char[len+1];
            strcpy(str,s.str);
           // num_strings++;
        }
        String & String::operator=(const char * s)
        {
            len=strlen(s);
            str=new char[len+1];
            strcpy(str,s);
          //  num_strings++;
        }
        char & String::operator[](int i)
        {
            return str[i];
        }
        const char & String::operator[](int i) const
        {
            return str[i];
        }
        bool operator<(const String & st,const String & st2)
        {
            if(strcmp(st.str,st2.str)<0)
                return true;
            else
                return false;
        }
        bool operator>(const String & st,const String & st2)
        {
            return (st<st2)==false;
        }
        bool operator==(const String & st,const String & st2)
        {
            if(strcmp(st.str,st2.str)>0)
                return true;
            else
                return false;
        }
        ostream & operator<<(ostream & os,const String & st2)
        {
            os<<st2.str;
            return os;
        }
        istream & operator>>(istream & is,String & st2)
        {
            char temp[String::CINLM];
            is.get(temp,String::CINLM);
            if(is)
                st2=temp;
            while(is&&is.get()!='
    ')
                continue;
            return is;
        }

    main.cpp:

    #include <iostream>
    #include"String.h"
    using namespace std;
    int main()
    {
       String name[5];
       char temp[10];
       int i;
       for(i=0;i<5;i++)
       {
           cin.get(temp,10);
           while(cin&&cin.get()!='
    ')
            continue;
           if(!cin&&temp[0]=='')//如果是空串的话,cin会为false
              break;
           else
            name[i]=temp;
       }
       int total=i;
       int firs=0,shor=0;
       if(total<0)
       {
           cout<<"没有输入"<<endl;
       }else{
            for(i=0;i<total;i++)
            {
                cout<<name[i][0]<<":"<<name[i]<<endl;
            }
            for(i=0;i<total;i++)
            {
                if(name[i]<name[firs])
                    firs=i;
                if(name[i].length()<name[shor].length())
                    shor=name[i].length();
            }
       }
       cout<<"最短的字符串为:"<<name[shor]<<endl;
       cout<<"最前面的字符串为:"<<name[firs]<<endl;
       return 0;
    }
  • 相关阅读:
    hdu2328 Corporate Identity
    hdu1238 Substrings
    hdu4300 Clairewd’s message
    hdu3336 Count the string
    hdu2597 Simpsons’ Hidden Talents
    poj3080 Blue Jeans
    poj2752 Seek the Name, Seek the Fame
    poj2406 Power Strings
    hust1010 The Minimum Length
    hdu1358 Period
  • 原文地址:https://www.cnblogs.com/JsonZhangAA/p/7207092.html
Copyright © 2020-2023  润新知