2012-01-27 8 views
0

qsortを使用して作業します。qsortで使用するChar * ptrをChar * ptrArray []に変換します。

#include <string.h> 
#include <stdlib.h> 
#pragma once 

int cstring_cmp(const void *a, const void *b); 


int main() 
{ 
    int count = 0; 
    char * randomStr = "sdjsn9i3ms;sa;'smsn92;w;''[w0p4;dsmsdf"; 
    char * charArray[] = 
    {"s","d","j","s","n","9","i","3","m","s",";","s","a",";","'","s","m","s","n" 
    ,"9","2",";","w",";","'","'","[","w","0","p","4",";","d","s","m","s","d","f"}; 

    size_t strings_len = sizeof(charArray)/sizeof(char *); 
    /*void qsort(void *base, size_t nel, 
    size_t width, int (*compar)(const void *, const void *));*/ 

    qsort(charArray, strings_len, sizeof(char *), cstring_cmp); 

    qsort(randomStr, strings_len, sizeof(char *), cstring_cmp); 

    // Pause at command prompt 
    system("pause"); 

    return 0; 

} // Close function Main 

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

明らかに、私の2番目のqsortは機能しません。これは私のcstring_cmp関数がqsortに入ってベースをサポートすることができないことに基づいているのか、それとも私のベースがqsortに正しく入力されるようにフォーマットされていないのか、私にとって謎です。

私の質問は、私がchar * randomStrがcharに* charArray []は動的に、実行時に、フライ、またはクールどんなフレーズであなたが思い付くことができコンバート行う方法です。私はたくさんの周りを検索したし、正しい質問をしていないだけかもしれないので、実際の質問に答えるために皆さんにお越ししています。

ちょうどCを始めると、あなたの答えで私の脳を揚げてみませんか私と私の脳はそれを感謝します。

ここでの目標は、randomStrをcharArray、qsortの形式に変換してからrandomStr形式に変換し直して、既に設定したものを見つけて置き換えることです。

ご協力いただきありがとうございます。すべての

答えて

1

まずあなたがchar *randomStr = "Stuff"you can't change itを使用している場合、それは未定義の動作です。次に、これを試してください:

int 
cmp_fry_brain(const void *a, const void *b) 
{ 
    return *((const char *)a) - *((const char *)b); 
} 

/* This is equivalent to the one above (the compiler will likely emit the 
* exact same code). 
*/ 
int 
cmp(const void *a, const void *b) 
{ 
    const char *x = a; 
    const char *y = b; 

    return *x - *y; 
} 

int 
main() 
{ 
    char str[] = "This is the end"; 
    qsort(str, strlen(str), 1, cmp_fry_brain); 
    /* ... */ 
} 
+0

頭脳のない 'cmp()'のメリットは何ですか?あなたはそれを使用していないので、脳浮揚バージョンと同じであることは明らかではないかもしれません。 –

+0

@JonathanLefflerフェア十分に、私はコメントを追加:-) – cnicutar