問題描述:
寫一個函數,用於比較兩個字符串的比較(string_compare).
程序分析:
(1)主要思想:傳入兩個字符串後,比較這兩個字符串中的每個元素,如果第一次比較就不相等,就不要讓它進入到下面的比較中。這樣一來,將它返回一個相減的值(即:兩數組中開始不相等的那兩個元素相減,返回值(int類型),是ASCII碼值相減)。進入比較的過程中時,相等就返回0;其他情況都返回那個相減的值。
(2)主要方式:定義指針數組,並對其初始化。然後照上面的思想,進行代碼的實現。
代碼如下:
/***指針數組 (1)int *a[10] 是一個指針數組--->是一個數組(每個數組中的元素都是int*類型) (2)int (*a)[10] 是一個數組指針--->指向一個數組(十個int類型的數組) 注意:*,[],()的優先級依次遞增。 下面使用了指針數組的例子,至於數組指針。。**/ #include#include int string_compare(const char *str1,const char *str2) { assert(str1); //ASSERT( f ) assert(str2); /*在Debug模式下,每次運行到這裡後會計算括號中的表達式, 如果表達式為0,則中斷執行,彈出一個警告框,用戶可 選擇“繼續”,“重試”,“忽略”在Release模式下,這 句語句不會被編譯進代碼。 ASSERT一般用於程序內部確認參 數的正確性,即調用內部函數的時候,要由調用者保證參數的正 確,而被調用函數內部,就可以通過ASSERT來檢查參數是否滿足要求。*/ while(*str1 == *str2 ) //判斷兩個數組中的元素是否相等 { str1++; //使兩個指針指向下一位;繼續比較 str2++; if(*str1 == '\0') //雙方比較到'\0'處,都相等 { return 0; //返回0,表示二字符串相等 } } return *str1-*str2; //若不相等,返回一個正值或負值 } int main() { char *ch[2]; ch[0] = "ab"; //對這個指針數組的元素初始化,使其指向這個字符串首元素的首地址 ch[1] = "a"; //同上 printf("%d\n",string_compare(ch[0],ch[1])); //調用這個函數 return 0; }