问题:
递归和非递归分别实现strlen 。
递归:
基本思路:
在函数体内部对此时的字符进行判断,如果是空字符返回0,如果不是返回值本次递归计1并加上调用递归函数进行下个位置判断。
代码:
#include<stdio.h>
#include<stdlib.h>
int Strlen(char str[]){
//判断字符是否是空字符
//如果是结束递归返回0
if (str[0] == '\0'){
return 0;
}
//如果不是调用递归函数进行下一个位置的判断
return 1 + Strlen(str + 1);
}
int main()
{
char str[10] = "abcde";
int len = Strlen(str);
printf("该字符串长度为:%d\n", len);
system("pause");
return 0;
}
非递归:
基本思路:
判断每个字符串每个位置是否为空字符,如果不是每进行一次判断字符串长度加1(初始长度记为0).如果是空字符结束。
代码:
#include<stdio.h>
#include<stdlib.h>
int Strlen(char str[]){
//定义len来记录字符串长度
int len = 0;
//判断字符串在下标为i时是否为空字符,如果是空字符循环结束
//每循环一次字符串长度+1
for (int i = 0; str[i] != '\0'; i++){
len++;
}
return len;
}
int main()
{
char str[10] = "abcde";
int len = Strlen(str);
printf("该字符串长度为:%d\n", len);
system("pause");
return 0;
}