2016-08-01 11 views
2

stdlib qsortを使用して文字列の配列をソートしようとしています。誰かが私に不足しているステップを教えてもらえますか?qsortを使用した文字列のソート

1.unsorted文字列配列の 2.first文字列が間違っている(ノーマがamnorとして印刷):

int compare(const void* a, const void* b) 
{ 
    const char *ia = (const char *)a; 
    const char *ib = (const char *)b; 
    return strcmp(ia, ib); 
} 

//utility to print strings 
void print_strs(char name[][10],int len){ 

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

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    char names[5][10] = {"norma","daniel","carla","bob","adelle"}; 
    int size1 = sizeof(names[0]); 
    int s2 = sizeof(names)/size1; 
    print_strs(names,5); 
    qsort(names,s2,sizeof(char),compare); 
    printf("\n==================\n"); 
    print_strs(names,5); 
    return 0; 
} 

次の出力での問題があります。

+1

メイク'char *'の配列を(あなたの比較関数が定義されているように)ソートしようとしているのか、 'char [10]'(配列が宣言されている)の配列か 'char 's(あなたがqsortに渡したサイズに従います)。 – immibis

+0

'sizeof(char)' - > 'size1' – kaylum

答えて

1

qsortを呼び出している間に、間違ったsizeが渡されています。個々の要素のサイズとしてsizeof(char)を渡していますが、これは間違っています。あなたの場合、個々の要素は10文字の文字列です。

だから、あなたは、のいずれかとしてqsortを呼び出すことにより、これを修正することができます。

qsort(names,s2,sizeof(char) * 10,compare); 

それとも、あなたはすでにsize1でこの値を獲得してきたように、あなたのように、という使用することができます。

qsort(names,s2,size1,compare); 
関連する問題