小白求助,关于qsort函数的使用,求大神解答,谢谢
AXDii 2016-11-30 06:17:51 小白编写了一个程序如下:
#include<iostream>
#include<cstdlib>
#include<cstring>
using namespace std;
int i;
int a[]={12,32,42,51,8,16,51,51,19,9};
double b[]={32.1,456.87,332.67,442.0,98.12,451.79,340.12,54.55,99.87,72.5};
char *c[10]={"enter","number","size","begin","of","cat","case","program","certain","a"};
int cmp_1(const void *a,const void *b){return *(int *)a-*(int *)b;}
double cmp_2(const void *a,const void *b){return *(double *)a-*(double *)b;}
int cmp_3(const void *p1,const void *p2){return strcmp((char*)p2,(char*)p1);}
int main()
{
cout<<"排序前:\n";
for(i=0;i<sizeof(a)/sizeof(int);i++)
cout<<a[i]<<" ";
cout<<endl;
for(i=0;i<sizeof(b)/sizeof(double);i++)
cout<<b[i]<<" ";
cout<<endl;
for(i=0;i<sizeof(c)/sizeof(char*);i++)
puts(c[i]);
qsort(a,sizeof(a)/sizeof(int),sizeof(int),cmp_1);
qsort(b,sizeof(b)/sizeof(double),sizeof(double),cmp_2);
qsort(c,sizeof(c)/sizeof(char *),sizeof(char *),cmp_3);
cout<<"\n排序后:\n";
for(i=0;i<sizeof(a)/sizeof(int);i++)
cout<<a[i]<<" ";
cout<<endl;
for(i=0;i<sizeof(b)/sizeof(double);i++)
cout<<b[i]<<" ";
cout<<endl;
for(i=0;i<sizeof(c)/sizeof(char*);i++)
puts(c[i]);
return 0;
}
打算调用qsort对数据进行排序,编译器报错如下:
\[Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]
In function 'int main()':
[Error] invalid conversion from 'double (*)(const void*, const void*)' to 'int (*)(const void*, const void*)' [-fpermissive]
72 0 E:\软件\Dev-C++\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\cstdlib In file included from E:/软件/Dev-C++/Dev-Cpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.9.2/include/c++/cstdlib
41 E:\软件\Dev-C++\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\ext\string_conversions.h -mingw32/4.9.2/include/c++/string
353 16 E:\软件\Dev-C++\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include\stdlib.h [Note] initializing argument 4 of 'void qsort(void*, size_t, size_t, int (*)(const void*, const void*))'
小白初学C++,还看不出哪里出了问题,求大神解答,谢谢。