1、模擬實現Strlen函數
a、運用指針相減實現
#include<stdio.h>
#include<assert.h> int my_strlen(char* arr) { assert(arr != NULL); char* x = arr; while (*arr++ != '\0') { ; } return arr - x - 1; } int main() { char arr[] = "abcdef"; int ret = my_strlen(arr); printf("%d", ret);return 0; }
b、運用函數遞歸來實現
1 #include<stdio.h> 2 #include<assert.h> 3 4 int my_strlen(char* arr) 5 { 6 assert(arr != NULL); 7 if(*arr == '\0') 8 return 0; 9 else 10 return 1 + my_strlen(arr + 1); 11 } 12 13 14 int main() 15 { 16 char arr[] = "abcdef"; 17 int ret = my_strlen(arr); 18 printf("%d",ret); 19 return 0; 20 }
c、用計數器方法實現
#include<stdio.h> #include<assert.h> int my_strlen(char* arr) { assert(arr != NULL); int count = 0; while (*arr != '\0') { count++; arr++; } return count; } int main() { char arr[] = "abcdef"; int ret = my_strlen(arr); printf("%d", ret); system("pause"); return 0; }
d、更加刁鑽的要求:一句話實現strlen
其實就是運用了逗號表達式、三目運算符的知識。
逗號表達式:從左向右一次計算,但是結果只和最后一個表達式有關。
三目運算符:表達式1 ? 表達式2 : 表達式3
如果表達式1為真,則輸出表達式2的結果,否則輸出表達式3的結果。
1 #include<stdio.h> 2 #include<assert.h> 3 4 int my_strlen(char* src) 5 { 6 return assert(src), !(*src) ? 0 : 1 + my_strlen(src + 1); 7 } 8 9 int main() 10 { 11 char arr[] = "abcdef"; 12 int ret = my_strlen(arr); 13 printf("%d\n", ret); 14 system("pause"); 15 return 0; 16 }