sort和qsort小试

今天因为想用用stl的sort和c的qsort试试,结果发现几个需要注意的地方:

1.sort的comp函数不能直接返回strcmp(s1,s2),会程序崩掉

查了sort里面的比较函数,只能返回bool类型的true和false,而strcmp返回是{-1,0,1},这样当出现-1就不满足了,这里用if(strcmp(s1,s2)<=0) return true; 还是if(strcmp(s1,s2)<0)就看对比较函数的要求了

2.qsort不能类似sort的comp函数那样只一次解引用比较s1和s2

qsort这里不像sort能够只用一次解引用,应该是sort的comp因为是适用于容器的,那么对于传进去的参数认为是迭代器,所以会自行进行一次解引用,而qsort是直接传参数,这里就是二级指针,所以在comp中需要先转化为原本的字符型二级指针,然后再解引用才能够得到每个字符串的值

最后的代码:

 

int    comp1(const void *s1, const void *s2){
    return strcmp(*(char**)s1,*(char**)s2);
}
bool comp2(const char *s1, const char *s2){
    if(strcmp(s1,s2)<=0)
        return true;
    else
        return false;
}
void    sort_t(char **str,int n){
    cout<<"str is: ";
    for(int i=0;i<n;i++)
        cout<<(*(str+i))<<",";
    cout<<endl<<"after sort : ";
    sort(str,str+n,comp2);
    for(int i=0;i<n;i++)
        cout<<(*(str+i))<<",";
    cout<<endl<<"after qsort : ";
    qsort(str,3,sizeof(*str),comp1);
    for(int i=0;i<n;i++)
        cout<<(*(str+i))<<",";
    cout<<endl;
}
int main(){
    char **char3 = new char *[3];
    char *ca1 = "asf", *ca2 = "afb", *ca3 = "wwc";
    char3[0] = ca1; 
    char3[1] = ca2;
    char3[2] = ca3; 
    sort_t(char3,3);
    system("PAUSE");
    return 0;
}

 

posted @ 2014-10-10 10:08  settingsun1225  阅读(124)  评论(0编辑  收藏  举报