设为首页 加入收藏

TOP

C语言--通用类型的swap函数和数组线性搜索函数的实现
2017-10-12 17:41:06 】 浏览:6035
Tags:语言 通用 类型 swap 函数 线性 搜索 实现

通用类型的SWAP函数的实现


void swap(void *vp1,void *vp2,int size){ 
    char buffer[size];       //也可用malloc获取一块size大的内存
    memcpy(buffer,vp1,size);
    memcpy(vp1,vp2,size);
    memcpy(vp2,buffer,size);
}
//调用举例
int n1=5,n2=6;
swap(&n1,&n2,sizeof(int));
char *s1="ming",*s2="li";
swap(&s1,&s2,sizeof(char **)); //字符串不等长,不能交换字符串,交换指针

通用类型数组的线性搜索函数的实现

void *lSerch(void *key,void *base,int n,int elemSize){
    void *elemAddr;
    for(int i;i<n;i++){
        elemAddr=(char *)base+i*elemSize;
        if(memcmp(elemAddr,key,elemSize)==0)
            return elemAddr;
    }
    return NULL;
}

上述函数在数组是存储shor,int,long,float,double,char等类型的元素都可用,因为这些类型内存存储长度固定,但对于char *arr[]存储字符串数组不适用,为了解决这个问题,增加函数的通用性,可以在上述函数中增加一个函数指针的参数,用这个函数调用一个自定义的比较函数,实例如下

void *lSearch(void *key,void *base,int total_n,int elemSize,int (*cmpfn)(void *,void *)){
    void *elemAddr;
    for(int i=0;i<total_n;i++){
        elemAddr=(char *)base+i*elemSize;
        if(!cmpfn){
            if(memcmp(elemAddr,key,elemSize)==0)
                return elemAddr;
        }else{
            if(cmpfn(elemAddr,key)==0)
                return elemAddr;
        }
    }
    return NULL;
}
//字符串数组搜索范例
int strCmp(void *vp1,void *vp2){
    char *s1=*(char**)vp1;  //不要写成s1=(char *)cp1;s1获取的值不一样
    char *s2=*(char**)vp2;
    return strcmp(s1,s2);
}

int main(){
    char *key="abc";
    char *arrc[]={"cc","bc","abc","dd"};
    char *find=lSearch(&key,arrc,4,sizeof(char *),strCmp);
}
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇素数对猜想 下一篇Search Insert Position

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

最新文章

热门文章

C 语言

C++基础

windows编程基础

linux编程基础

C/C++面试题目