2011-10-07 65 views
0

我知道qsort從C庫和我已經實現它與字符和整數(從const void *形式轉換爲相關形式),但現在我正在實現代碼,這給我最長的重複在給定的句子這裏是簡單的比較功能使用qsort與比較功能

int pstrcmp(char **p,char **q){ 
    return strcmp(*p,*q); 

} 

,我想用它在快速排序這樣

qsort(a,n,sizeof(char *),pstrcmp);(a is array of strings) 

當我直接寫,但寫它是不兼容和兒子,顯示了我的錯誤,請幫我糾正它

錯誤是這樣

2智能感知:類型爲 「int(*)(字符** P,焦炭** Q)」 是 int型的(__cdecl *)的」參數不相容(常量空隙的參數* 常量無效*)」 C:\用戶\ datuashvili \文檔\ Visual工作室 2010 \項目\ duplicate_strings \ duplicate_strings \ duplicates_strings.cpp 32個27 duplicate_strings

+1

是否有原因,你在C++中使用'qsort'而不是'std :: sort'? –

+4

使用來自''的'std :: sort'與函數'bool pstrcmp(const char * a,const char * b){return strcmp(a,b)<0;}'相比更加簡單。使用'std :: string'甚至更簡單,你根本不必實現比較函數。 – visitor

回答

4

你需要給你的比較器功能的正確功能簽名,然後在內部施放,例如

int pstrcmp(const void * p, const void * q) 
{ 
    const char **ps = (const char **)p; 
    const char **qs = (const char **)q; 

    return strcmp(*ps, *qs); 
} 
+1

謝謝我不知道,非常感謝 –