在C++中自定义string类#pragma once#include<iostream>class str{public:str(void);str(char*);~str(void);protected:char* string;public:int length(void);int findchar(char s);int findstr(char* str);char** seg(char* sign, int* out=NULL);char* copy(int start, int end);int findchar(char* str, char c);int findstr(char* str, char* s);int contain(char* str);int contain(char* strin, char* str);int length(char* p);char* copy(char* str, int start, int end);char** seg(char* str, char* sign, int* out=NULL);char* tochar(void);char* tochar(str str);void tostring(char* c);char* substr(char* string, char* str);bool substr(char* str);char* suballstr(char* string, char* str);bool suballstr(char* str);char* appendstr(char* string, char* str);bool appendstr(char* str);};#include"str.h"str::str(void){string=NULL;}str::str(char*s){string=s;}str::~str(void){if(string!=NULL)free(string);}int str::length(void){return length(string);}int str::findchar(char s){return findchar(string,s);}int str::findstr(char* str){return findstr(string,str);}char** str::seg(char* sign, int* out) {return seg(string,sign,out);}char* str::copy(int start, int end) {return copy(string,start,end); }int str::findchar(char* str, char c){if((!str)||(*str==NULL)||(c==NULL))return -1;char*p=str;while(*p){if(*p==c)return p-str;p++;}return -1;}int str::findstr(char* str, char* s){if((!s)||(*s==NULL)||(*str==NULL)||(!str)) return -1;char*p=str;int i;while(*p){if((i=findchar(p,*s))!=-1){p+=i;if(contain(p,s))return p-str;}p++;}return -1;}int str::contain(char* str){return contain(string,str);}int str::contain(char* strin, char* str){if(!str||(*str==NULL)||!strin||(*strin==NULL))return 0;while(*str){if((*str++)!=(*strin++))return 0;}return 1;}int str::length(char* p){if(!p)return 0;char*pi=p;while(*pi){pi++;}return pi-p;}char* str::copy(char* str, int start, int end){if((!str)||(*str==NULL)||(start<0)||(end<0))return NULL;int lengt=length();if(end>lengt)end=lengt;if(start>end)end=start;int l=end-start+1;char*result=(char*)malloc((l+1)*sizeof(char));int i;for(i=0;i<l;i++){result[i]=str[i+start];}result[i]='\0';return result;}char** str::seg(char* str, char* sign, int* out){if(out==NULL)out=new int[1];if(!sign||(*sign==NULL)||(str==NULL))return NULL;char** result=(char**)malloc(sizeof(char*)*16);char*p=str;*out=0;while(*p){int i;if((i=findstr(p,sign))!=-1){result[*out]=copy(p,0,i-1);if(result[*out]&&((*result[*out])!=NULL))(*out)++;p+=i+length(sign)+1;}else{result[*out]=copy(p,0,length(p));if(*result[*out]!=NULL)(*out)++;break;}}char**temp=result;result=(char**)malloc(sizeof(char*)*(*out));for(int i=0;i<*out;i++){result[i]=temp[i];}free(temp);return result;}char* str::tochar(void){return string;}char* str::tochar(str str){return str.tochar();}void str::tostring(char* c){string=c;}char* str::suballstr(char* string, char* str){if((!string)||(!str)||(*string==NULL)||(*str==NULL))return NULL;int num;char ** c;if((c=seg(string,str,&num))==NULL)return NULL;char*p;for(p=*c;*p;){p++;if(*p){p=appendstr(p-1,p);free(p-1);}}return p-1;}bool str::suballstr(char* str){if(!str)return false;char*temp=string;if(!(string=suballstr(string,str))){string=temp;return false;}free(temp);return true;}char* str::appendstr(char* string, char* str){if(!string||!str)return NULL;int length1=length(string),i;int length2=length(str);char*result=(char*)malloc(sizeof(char)*(length1+length2+1));for(i=0;i<length1;i++)result[i]=string[i];for(int j=0;j<length2;i++,j++)result[i]=str[j];result[i]='\0';return result;}bool str::appendstr(char* str){if(!str)return false;char*temp=string;if((string=appendstr(string,str))==NULL) {string=temp;return false;}free(temp);return true;}char* str::substr(char* string, char* str){if(!string||!str)return NULL;int i;if((i=findstr(string,str))==-1)return NULL;int length1=length(string);int length2=length(str);char*result=(char*)malloc((length1-length2+1)*sizeof(char));int j,k;for(j=0;j<i;j++)result[j]=string[j];for(k=i+length2;k<length1;k++,j++){result[j]=string[k];}result[j]='\0';return result;};bool str::substr(char* str){if(!str)return false;char*temp=string;if((string=substr(string,str))==NULL){string=temp;return false;}free(temp);return true;};。