zoukankan      html  css  js  c++  java
  • 请用c++ 实现stl中的string类,实现构造,拷贝构造,析构,赋值,比较,字符串相加,获取长度及子串等功能。

      1 #include<iostream>
      2 #include<cstring>
      3 using namespace std;
      4 class String{
      5 public:
      6     //默认构造函数
      7     String(const char* str=NULL);
      8     //复制构造函数
      9     String(const String &str);
     10     //析构函数
     11     ~String();
     12     //字符串连接
     13     String operator+(const String & str);
     14     //字符串赋值
     15     String & operator=(const String & str);
     16     //字符串赋值
     17     String & operator=(const char* str);
     18     //判断字符串是否相等
     19     bool operator==(const String & str);
     20     //获取字符串长度
     21     int length();
     22     //求子字符串[start,start+-1]
     23     String substr(int start,int n);
     24     //重载输出
     25     friend ostream & operator<<(ostream & o,const String & str);
     26 private:
     27     char * data;
     28     int size;
     29 };
     30 //构造函数
     31 String::String(const char *str){
     32     if(str==NULL){
     33         data=new char[1];
     34         data[0]='';
     35         size=0;
     36     }else{
     37         size=strlen(str);
     38         data=new char[size+1];
     39         strcpy(data,str);
     40     }
     41     cout<<str<<"构造"<<endl;
     42 }
     43 //复制构造函数
     44 String::String(const String & str){
     45     size=str.size;
     46     data=new char[size+1];
     47     cout<<str<<"拷贝"<<endl;
     48     strcpy(data,str.data);
     49 }
     50 //析构函数
     51 String::~String(){
     52     delete[] data;
     53 }
     54 //字符串连接
     55 String String::operator+(const String & str){
     56     String newStr;
     57     //释放原有空间
     58     delete[] newStr.data;
     59     newStr.size=size+str.size;
     60     newStr.data=new char[newStr.size+1];
     61     strcpy(newStr.data,data);
     62     strcpy(newStr.data+size,str.data);
     63     return newStr;
     64 }
     65 //字符串赋值
     66 String & String::operator=(const String &str){
     67     if(data==str.data){
     68         return *this;
     69     }
     70     delete[] data;
     71     size=str.size;
     72     data=new char[size+1];
     73     strcpy(data,str.data);
     74     cout<<str<<"赋值"<<endl;
     75     return *this;
     76 }
     77 //字符串赋值
     78 String & String::operator=(const char* str){
     79     if(data==str){
     80         return *this;
     81     }
     82     delete[] data;
     83     size=strlen(str);
     84     data=new char[size+1];
     85     strcpy(data,str);
     86     cout<<str<<"赋值"<<endl;
     87     return *this;
     88 }
     89 //判断是否字符串相等
     90 bool String::operator==(const String &str){
     91     return strcmp(data,str.data)==0;
     92 }
     93 //获取字符串长度
     94 int String::length(){
     95     return size;
     96 }
     97 //求子字符串[start,start+n-1]
     98 String String::substr(int start,int n){
     99     String newStr;
    100     delete[] newStr.data;
    101     newStr.data=new char[n+1];
    102     for(int i=0;i<n;++i){
    103         newStr.data[i]=data[start+i];
    104     }
    105     newStr.data[n]='';
    106     newStr.size=n;
    107     return newStr;
    108 }
    109 //重载输出
    110 ostream & operator<<(ostream &o,const String & str){
    111     o<<str.data;
    112     return o;
    113 }
    114 int main(){
    115     String str1("Hello ");
    116     String str2=str1;
    117     str2=str1;
    118     return 0;
    119 }
  • 相关阅读:
    基于SSM框架web搜索功能的实现
    使用APICloud打包webapp
    mac如何运行vue项目
    前端和算法实现:给网站上加上自己的水印(以后用上)
    jQuery常用代码片段
    关于vscode的个人配置
    听说你想用git,安装一下咯
    vue创建项目的一种方法
    用js控制css动画效果@keyframes
    axios的封装和拦截
  • 原文地址:https://www.cnblogs.com/yichengming/p/11147971.html
Copyright © 2011-2022 走看看