在C++中自定义string类
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在C++中自定义string类
#pragma once
#include
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 { 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;