//////// 研究一些小函數的寫法可以增強你的程式功力! //////// 以下九個函數的功能與程式庫中 int strlen(char*) 完全相同! //////// 仔細研究後你對於字串處理的功力就會大增 :-) //////// 其實, 懂了 C 的字串就是任何地方都可當字串的開始 //////// 只要遇見 內碼是 0 的 byte 就是字串結束 //////// 所以空字串雖然 length 是 0, 但至少佔用 1 byte //////// 內碼 0 可以寫 0 也可以寫 '\0' 意思一樣 ! //////// 注意 '0' 的 ASCII 值是 48, 'A' 是 65, 'a' 是 97 ///////////////// 01 //len.c : find length of a string (strlen); 9 different versions! 02 // 與 strlen(char*) 功能相同 ! 03 int len(char x[ ]) { 04 int i=0; 05 while(x[i]) ++i; 06 return i; 07 } 08 int len2(char x[ ]) { 09 int i=0; 10 while(x[i++]); // 先取其值, 再做 ++ 11 return --i; // 注意要減 1 喔 12 } 13 int len3(char x[ ]) { 14 int i= -1; 15 while(x[++i]); // 先做 ++, 再取其值 16 return i; // 注意這是正確的! 17 } 18 int len4(char x[ ]) { 19 int i = 0; 20 for( ;; ) { 21 if(x[i] == 0) break; 22 ++i; 23 } 24 return i; // 注意這也是正確的! 25 } 26 int len5(char x[ ]) { 27 int i; 28 for(i=0; ; i++) { 29 if(x[i] == 0) break; 30 } 31 return i; // 注意這也是正確的! 32 } 33 int len6(char x[ ]) { 34 int i; 35 for(i=0;x[i] != 0; i++); 36 return i; // 注意這也是正確的! 37 } 38 int len7(char x[ ]) { 39 char*p = x; 40 while(*p) ++p; 41 return p - x; // 注意這寫法是正確的! 42 } 43 int len8(char *x) { 44 char*p = x; 45 while(*p) ++p; 46 return p - x; // 注意這寫法是正確的! 47 } 48 int len9(char *x) { 49 char*p = x; 50 while(p[0]) ++p; 51 return p - x; // 注意這寫法是正確的! 52 } 53 #include 54 int main( ) { 55 printf("Length of \"abc\" is %d; ", len("abc")); 56 printf("Length of \"\" is %d\n", len("")); 57 printf("Length of \"abc\" is %d; ", len2("abc")); 58 printf("Length of \"\" is %d\n", len2("")); 59 printf("Length of \"abc\" is %d; ", len9("abc")); 60 printf("Length of \"\" is %d\n", len9("")); 61 } /********* 62 D:\testc> path C:\Dev-Cpp\bin;%path% 63 D:\testc> gcc len.c 64 D:\testc> a 65 Length of "abc" is 3; Length of "" is 0 66 Length of "abc" is 3; Length of "" is 0 67 Length of "abc" is 3; Length of "" is 0 68 ==========================================***/