剑指offer这本书中程序实现若干是基于C版本的。
比如这道题目:把数组排成最小的数
使用qsort,其中qsort的参数如下
void qsort (void* base, size_t num, size_t size, int (*compar)(const void*,const void*));一般来说,现在我都会用sort,然后我传了一个函数,定义也是
int compareNum(int num1,int num2)给sort
程序就挂了==
后来发现sort的compare参数是
bool compareNum(int num1,int num2)
用C++写的代码比c写的代码简短多了。
这道题目本身不难,主要是区别qsort和sort传递参数区别,返回Int,bool能导致程序报错。
assert失败。
const int MAXLEN=20;
char *arr1=new char[MAXLEN];
char *arr2=new char[MAXLEN];
bool compareNum(int num1,int num2)
{
sprintf(arr1,"%d%d\0",num1,num2);
sprintf(arr2,"%d%d\0",num2,num1);
int len=strlen(arr1);
return strcmp(arr1,arr2)>0;
}
struct myfuncCompare {
bool operator() (int i,int j) { return compareNum(i,j);}
} myobject;
void print(vector<int> &num)
{
sort(num.begin(),num.end(),compareNum);
//sort(num.begin(),num.end(),myobject);
for (int i=0;i<num.size();++i)
{
printf("%d",num[i]);
}
}