2012-01-27 71 views
0

使用使用快速排序工作。轉換的char * PTR爲char * ptrArray []中的qsort

#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); 
} 

因此,顯然我的第二個qsort不工作。不管是基於我cstring_cmp功能進入我的快速排序不能夠支持基地我給它或者是因爲我的基地沒有格式化正確地輸入到快速排序是一個謎給我。

我的問題是如何轉換的char * randomStr爲char * charArray []動態,在運行期間,對飛,或任何陰涼短語,你可以拿出。我已搜索周圍很多,也許我只是沒有提出正確的問題,所以我來你們對一些真正的問題回答功率。

剛開始Ç所以如果你請儘量不要炒我的大腦與你的答案,我和我的大腦將不勝感激。

我的最終目標是將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()'有什麼好處?既然你沒有使用它,它可能並不是顯而易見的,它與大腦炸的版本相同。 – 2012-01-27 04:27:23

+0

@JonathanLeffler夠公平的,我添加了評論:-) – cnicutar 2012-01-27 04:28:40