参考:https://blog.csdn.net/arcsinsin/article/details/12918433
https://blog.csdn.net/fjx1173865548/article/details/48345061
题目描述:
对N个长度最长可达到1000的数进行排序。
- 输入:
-
输入第一行为一个整数N,(1<=N<=100)。
接下来的N行每行有一个数,数的长度范围为1<=len<=1000。
每个数都是一个正数,并且保证不包含前缀零。
- 输出:
-
可能有多组测试数据,对于每组数据,将给出的N个数从小到大进行排序,输出排序后的结果,每个数占一行。
- 样例输入:
-
3 11111111111111111111111111111 2222222222222222222222222222222222 33333333
- 样例输出:
-
33333333 11111111111111111111111111111 2222222222222222222222222222222222
———————————————————————————————————————————————————
本题是对字符串二维数组的一个排序。用sort已经不行了,用qsort !(下面证明sort也是可以的,hhh)
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;
- }
———————————————————————————————————————————————————
- #include<iostream>
- #include<stdio.h>
- #include<algorithm>
- #include<string.h>
- using namespace std;
- #define N 1001
- struct Num{
- char num[N];
- int len;
- bool operator < (const Num &A) const{
- if(len != A.len)
- return len < A.len;
- else{
- for(int i = 0; i < len; i++)
- {
- if(num[i] != A.num[i])
- return num[i] < A.num[i];
- else
- continue;
- }
- }
- }
- }buf[101];
- int main()
- {
- int n;
- while(scanf("%d", &n) != EOF){
- for(int i = 0; i < n; i++){
- scanf("%s", buf[i].num);
- buf[i].len = strlen(buf[i].num);
- }
- sort(buf, buf+n);
- for(int i = 0; i < n; i++){
- printf("%s\n", buf[i].num);
- // buf[i].len = strlen(buf[i].num);
- }
- }
- return 0;
- }
- /**************************************************************
- Problem: 1190
- User: various
- Language: C++
- Result: Accepted
- Time:10 ms
- Memory:1624 kb
- ****************************************************************/