1. 程式人生 > >三種方法實現strlen函式

三種方法實現strlen函式

      我們知道,strlen函式是計算字串長度的函式,那麼要實現strlen函式主要就是得到字串長度,那麼 怎樣才能得到字串長度呢?如果是整形的陣列,我們可以通過下標來尋找,可是這是字串,我們就要了解字串了。

        這裡定義一個字串 char *str = "abcdef";這裡我們可以看到字串裡有'a','b','c','d','e','f',其實字串後還有一個'\0',用來表示字串的結束,當字串中出現'\0'時,標誌這個字串結束。我們可以由此入手,將字元逐個與'\0'比較,若相等,表示字串結束,計算前幾個字元的數量即可,所以此處核心就是尋找'\0'。下面給出兩種方法的程式碼:

1.非遞迴

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>

int my_strlen(char *str)
{
	int count = 0;
	while('\0' != *str)
	{
		count++;
		str++;
	}
	return count;
}

int main()
{
	char *str = "abcdef";
	int len = my_strlen(str);
	printf("%d\n", len);

	system("pause");
	return 0;
}

2.遞迴

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>

int my_strlen(char *str)
{
	if ('\0' == *str)
		return 0;
	else
		return 1 + (my_strlen(str + 1));
}

int main()
{
	char *str = "abcdef";
	int len = my_strlen(str);
	printf("%d\n", len);

	system("pause");
	return 0;
}

3.指標相減 

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>

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

int main()
{
	char *str = "abcdef";
	int len = my_strlen(str);
	printf("%d\n", len);

	system("pause");
	return 0;
}

 結果演示: