0

たとえば、4行の配列があり、すべての行に50文字以上の文字列がある場合、qsortを使用して文字列を含む2d配列の文字列をアルファベット順に並べ替えるにはどうすればよいですか...qsort関数を使用して並べ替えるにはどうすればよいですか文字列をアルファベット順に?

私はこれを使いました

            qsort(arr, i, 500*sizeof(arr[0]), compare);
            for (j=0; j<i; j++) {
                    printf("%s\n",arr[j]);
            }

私が使用したコンパレータは

            int compare (const void * a, const void * b ) {
                    return strcmp(a, b);
            }

しかし、コンパイルしようとするとセグメンテーション違反エラーが発生します

4

1 に答える 1

4

このように動作します。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define size 10
int compare (const void * a, const void * b ) {
  return strcmp(*(char **)a, *(char **)b);
}
int main () {
    char *arr[size];
    char buf[1000];
    for (int i=0;i<size;i++) {
      arr[i]=strdup (gets (buf)); // using gets is risky because it can write past buf
    }
    qsort (arr, size, sizeof (char*), compare);
    for (int i=0;i<size;i++) {
      printf ("%s\n", arr[i]);
      free (arr[i]);
    }
}
于 2012-12-23T20:07:23.617 に答える