2012-01-27 1 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); 
} 

분명히 두 번째 qsort가 작동하지 않습니다. 그것이 내 qstort에 들어가는베이스를 지원하지 못하는 내 cstring_cmp 함수를 기반으로하는지 아니면 내베이스가 올바르게 qsort에 입력되도록 포맷되지 않았기 때문에 내게 미스테리입니다.

내 질문은 char * charArray []로 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 Fair, 충분히 덧붙였다 :-) – cnicutar

관련 문제