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 }