2016-02-15 38 views
0

我有以下代碼:選擇排序使用指針

void sortStrings(char strings[5][32]) 
{ 
    int i = 0, j = 0, wall = 0; 
    int min = i; 
    for (int i = wall; i < 5; i++){ 
     min = i; 
     for (j = wall; j < 5; j++){ 
      if (strcmp(strings[j], strings[min]) < 0){ 
       min = j; 
      } 
     } 
     swapStrings(strings[min], strings[wall]); 
     wall++; 
    } 
} 

這段代碼的作用是排序按字母順序排列的字符串的二維數組,我已經測試它,它工作正常,現在我的問題是,怎麼可能我沒有使用數組操作(又名僅使用指針和指針操作)來實現此代碼。

這就是我到目前爲止,當我嘗試運行它,所以我做錯了什麼?

{ 
    int i = 0, j = 0, wall = 0; 
    char *p = strings; 
    int min; 
    for (i = wall; i < 5; i++){ 
     min = i; 
     for (j = wall; j < 5; j++){ 
      if (*(p + j) < *(p + min)){ 
       min = j; 
      } 
     } 
     swapStrings(*(p + j),*(p + wall)); 
     wall++; 
    } 
} 

這裏是swapStrings方法,我用供參考:

void swapStrings(char string1[], char string2[]) 
{ 
    char temp[32]; 
    strcpy(temp, string1); 
    strcpy(string1, string2); 
    strcpy(string2, temp); 
} 

預期輸出是:如果我在5串進入,可以說它們是:

hello 
goodbye 
how 
are 
you 

應該返回:

are 
goodbye 
hello 
how 
you 

謝謝。

+0

把函數簽名放在你的指針示例中,否則我們不知道你想如何工作。此外,爲什麼5 - 你想這個尺寸總是5尺寸,或者你應該傳遞一個參數的大小(在你的功能缺失簽名)?等等。 –

+0

'char * p = strings;'由於對象字符串是一個二維數組,因此無效。看看這個答案:http://stackoverflow.com/questions/7586702/is-2d-array-a-double-pointer –

回答

0

你有兩個錯誤:

  1. p必須char**而不是char*
  2. 字符串之間相比較的話需要一個循環,例如:

    int t = 0; 
    while (*(*(p + j)+t) && (*(*(p + j) + t) == *(*(p + min) + t))) 
        t++; 
    if (*(*(p + j) + t) < *(*(p + min) + t)) { 
        min = j; 
    } 
    

    也許你想寫你功能進行比較。