三种方法:递归和非递归分别实现strlen

不使用库函数来实现strlen函数:
方法1:设置一个计数器len,当str不是‘\0’时,len++;
方法2:采用递归的想法,将大事化小;“abcde”可是转化为1+“bcde” … 1+1+1+1+“e”。每一次都访问str的下一个地址,当然跳出递归的条件还是str!=0.
方法3:因为指针-指针=之间的元素个数;所以可以采用这个想法将指针首元素地址存储在*start中,
再采用循环将最后一个元素地址与首元素地址相减即可得到元素个数。

代码实现:

#include<stdio.h>
int my_strlen1(char *str){
	int len = 0;
	while (*str != 0){
		len++;
		str++;
	}
	return len;
}


int my_strlen2(char *str){
	if (*str != 0){
		return 1 + my_strlen2(str + 1);
	}
	else
		return 0;
}


int my_strlen3(char *str){
	char *start = str;
	while (*str != 0){
		str++;
	}
	return str - start;
}

int main(){
	char str[] = "abcde";
	printf("%d\n", my_strlen1(str));
	printf("%d\n", my_strlen2(str));
	printf("%d\n", my_strlen3(str));
	return 0;
}

猜你喜欢

转载自blog.csdn.net/gaga_yu/article/details/83245031