iT邦幫忙

0

使用qsort 跟strcmp排序超長數字

  • 分享至 

  • xImage

遇到的問題是input很大的數字,然後ouput出這串數字所能組合出的最大數字,例如: 12, 34, 56要output: 563412
因為數字大所以我用array方式存數字,然後比較的話我想到透過qsort + strcmp的方式比較,function比較的扣長這樣:

int mycmp(const void *a, const void *b){
char const *aa = (char const *)a;
char const *bb = (char const *)b;

return strcmp(aa,bb);

}

main:
qsort(arr, n_nums, 1000, mycmp);

n是有幾個數字,
arr是二維陣列,
for(int i = 0; i < n; i++){
scanf("%s",&arr[i]);
}

但是我qsort完想印出結果arr完全是空的,也沒報錯,想請問各位大神是怎麼回事......

完整程式碼如下:(題目來自資工系朋友提供)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int mycmp(const void *a, const void *b){
    //更改型別
    char const *aa = (char const *)a;
    char const *bb = (char const *)b;
    //printf("cmp %s, %s\n",aa,bb);
    return strcmp(aa,bb);
}

int main(){
    int n;
    char arr[12][1001];

    while(scanf("%d", &n) != EOF){
        for(int i = 0; i < n; i++){
            scanf("%s",&arr[i]);
            //printf("%d string is %s\n",i,arr[i]);
        }
        //use strcmp + qsort
        qsort(arr, n, 1000, mycmp);

        for(int i = 0; i < n; i++){
            printf("%s",arr[i]);
        }
        printf("\n");
    }

    return 0;
}

謝謝!

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2021-05-29 11:48:27
最佳解答
$ ./a.out
3
1987
8765
3409

1987
3409
8765

3
1024
963
65

1024
65
963

^Z
[7]+  Stopped                 ./a.out

只改兩列
qsort(arr, n, sizeof(arr[0]), mycmp);
和加一個換列printf("\n");

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int mycmp(const void *a, const void *b){
    //更改型別
    char const *aa = (char const *)a;
    char const *bb = (char const *)b;
    //printf("cmp %s, %s\n",aa,bb);
    return strcmp(aa,bb);
}

int main(){
    int n;
    char arr[12][1001];

    while(scanf("%d", &n) != EOF){
        for(int i = 0; i < n; i++){
            scanf("%s",&arr[i]);
            //printf("%d string is %s\n",i,arr[i]);
        }
        //use strcmp + qsort
        qsort(arr, n, sizeof(arr[0]), mycmp);

        printf("\n");

        for(int i = 0; i < n; i++){
            printf("%s\n",arr[i]);
        }
        printf("\n");
    }

    return 0;
}
silisili iT邦新手 5 級 ‧ 2021-05-29 13:58:33 檢舉

好的謝謝~

程式已附上

silisili iT邦新手 5 級 ‧ 2021-05-30 18:33:56 檢舉

所以應該是在qsort size有問題嗎?
我再改了,有成功qsort了!謝謝!

我要發表回答

立即登入回答