来源:
2006年华中科技大学计算机研究生机试真题
————————————————————————————————————————————————————
本题是对字符串二维数组的一个排序。用sort已经不行了,用qsort !
qsort
用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));
参数: 1 待排序
数组首地址
2 数组中待排序元素数量
3 各元素的占用空间大小
4 指向函数的
指针,用于确定排序的顺序
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = 1002;
char s[maxn][maxn];
//请注意cmp函数的写法
int cmp(const void *a,const void *b)
{
int len1 = strlen((char *)a);
int len2 = strlen((char *)b);
if (len1 == len2)
return strcmp((char *)a,(char *)b);
else
return len1 - len2;
}
int main()
{
int n,i;
while (scanf("%d",&n) == 1)
{
for (i = 0; i < n; i++)
{
scanf("%s",s[i]);
}
//注意qsort四个参数的不同含义
//特别是第三个参数:单个元素占用空间的大小
qsort(s,n,sizeof(s[0]),cmp);
for (i = 0; i < n; i++)
{
cout<<s[i]<<endl;
}
}
return 0;
}