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; }