该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
string.class.c:
#include "string.class.h"
#include
#include
#include
static STR* this = NULL;
static int length()
{
return strlen(this->string);
}
static char* subIndex(int index)
{
return (this->string+index);
}
static char* subString(const char* str)
{
return strstr(this->string,str);
}
static int indexOf(const char* str)
{
const char* p = strstr(this->string,str);
if(!p) return -1;
return p-this->string;
}
static char* join(const char* str)
{
int tz = strlen(this->string);
char* temp = (char*)malloc(tz+1);
memset(temp,0,tz);
strcpy(temp,this->string);
this->string = (char*)realloc(this->string,tz+strlen(str)+1);
memset(this->string,0,tz+strlen(str)+1);
sprintf(this->string,"%s%s",temp,str);
free(temp);
return this->string;
}
static void set(const char* str)
{
char* temp = (char*)malloc(strlen(str)+1);
memset(temp,0,strlen(str)+1);
strcpy(temp,str);
this->string = (char*)realloc(this->string,strlen(str)+1);
memset(this->string,0,strlen(str)+1);
strcpy(this->string,temp);
free(temp);
}
static void del()
{
if(this->string){
free(this->string);
this->string = NULL;
}
}
static int toInt()
{
return strtol(this->string,NULL,0);
}
static int cmp(const char* str)
{
if(strcmp(this->string,str)) return 0;
return 1;
}
static void upper()
{
char* p = this->string;
while(*p){
if(*p>='a' && *p<='z'){
*p = *p - ('a' - 'A');
}
++p;
}
p = NULL;
}
static void lower()
{
char* p = this->string;
while(*p){
if(*p>='A' && *p<='Z'){
*p = *p + ('a' - 'A');
}
++p;
}
p = NULL;
}
static float toFloat()
{
return strtof(this->string,NULL);
}
STR* new_string(const char* str)
{
this = (STR*)malloc(sizeof(STR));
memset(this,0,sizeof(STR));
this->length = length;
this->subIndex = subIndex;
this->subString = subString;
this->indexOf = indexOf;
this->join = join;
this->set = set;
this->del = del;
this->toInt = toInt;
this->cmp = cmp;
this->upper = upper;
this->lower = lower;
this->toFloat = toFloat;
this->string = (char*)malloc(strlen(str)+1);
memset(this->string,0,strlen(str)+1);
strcpy(this->string,str);
return this;
}
void delete_string(STR** obj)
{
del();
if(this){
free(this);
this = NULL;
}
*obj = NULL;
}
当然C语言是极其灵活的,我为了方便理解,故意写成了类似C++的类,也是可以不这么写的。。。就连这个维护这个“类”的指针,我也写成了this,C语言中是没有this这个关键字的。。。
,,,
此外还有继承、多态,其实C语言中的printf函数就已经具有部分的多态特性了,printf就一个函数,依据输入的不同,也完成了不同的功能,我本来还想讨论一下C语言中的可变参数函数写法,时间有限,大家可以搜索 stdarg.h 这个头文件,是C语言专门处理可变参数的,
,
继承其实也很容易实现,有函数指针,很容易把其他结构体中的“方法”地址,复制过来,达到代码重用和降低耦合度的目的