//strcmp.c -- @CopyLeft by tsaiwn@csie.nctu.edu.tw // 我們常需要比較兩字串是否相等, 注意不可直接用 == 喔! // 之前範例中我們用過 strcmp(char*, char*) 這程式庫函數. // 那 strcmp(char*t, char*s) 是如何寫的 ? // 其實這函數也沒什麼學問:-) 阿就是一字一字的比啊! // 本範例中寫了一個與 strcmp( ) 做完全相同事情的 myScmp( ) /// 並且寫了簡單的 testing driver 主程式測試與程式庫比較 /// 請仔細研究測試結果以及我寫的 int myScmp(char*, char*) #include #include int myScmp(char*, char*); int main( ) { printf( "strcmp(\"ABCDEF\", \"abc\")== %d\n", strcmp("ABCDEF", "abc") ); /// printf( "strcmp(\"abcde\", \"BCDEFGGG\")== %d\n", strcmp("abcde", "BCDEFGGG") ); /// printf( "strcmp(\"abc\", \"abc\")== %d\n", strcmp("abc", "abc") ); printf( "strcmp(\"abc\", \"abcde\")== %d\n", strcmp("abc", "abcde") ); printf( "strcmp(\"abcde\", \"abc\")== %d\n", strcmp("abcde", "abc") ); //////// printf("====== now try myScmp:\n"); printf( "myScmp(\"ABCDEF\", \"abc\")== %d\n", myScmp("ABCDEF", "abc") ); /// printf( "myScmp(\"abcde\", \"BCDEFGGG\")== %d\n", myScmp("abcde", "BCDEFGGG") ); /// printf( "myScmp(\"abc\", \"abc\")== %d\n", myScmp("abc", "abc") ); printf( "myScmp(\"abc\", \"abcde\")== %d\n", myScmp("abc", "abcde") ); printf( "myScmp(\"abcde\", \"abc\")== %d\n", myScmp("abcde", "abc") ); printf("Hit ENTER key..."); getchar( ); return 0; } int myScmp(char*x, char*y) { // 完全與 strcmp( )做的相同! int i=0; while(x[i] != 0) { // 左邊還沒結束; 想一想若右邊先結束呢? if(x[i] == y[i]) { i++; continue; } // 相等, next char if(x[i] > y[i]) return 1; // 不相等(右邊先結束也在這) else return -1; // 左小右邊大 ! } // 若一直都相等且右邊先結束則沒問題, 會 return 1 if(y[i] == 0) return 0; // 一直都相等, 且同時結束 ! return -1; // x < y 因一直都相等, 且 y 還沒有結束 !!! }// myScmp( /****** D:\test> path C:\Dev-Cpp\bin;%path% D:\test> gcc strcmp.c D:\test> a.exe strcmp("ABCDEF", "abc")== -1 strcmp("abcde", "BCDEFGGG")== 1 strcmp("abc", "abc")== 0 strcmp("abc", "abcde")== -1 strcmp("abcde", "abc")== 1 ====== now try myScmp: myScmp("ABCDEF", "abc")== -1 myScmp("abcde", "BCDEFGGG")== 1 myScmp("abc", "abc")== 0 myScmp("abc", "abcde")== -1 myScmp("abcde", "abc")== 1 Hit ENTER key... ***************************/