1. 程式人生 > >遞迴和非遞迴分別實現 strlen

遞迴和非遞迴分別實現 strlen

非遞迴法:

// c string 是以 \0 結尾的字元陣列
#include <stdio.h>
#include <stdlib.h>
int main() {
	int strlen = 0;
	char str[] = "abcd";
	while (str[strlen] != '\0') {
		++strlen;
	}
	printf("%d\n", strlen);
	system("pause");
	return 0;
}

C語言中的字串是以字元陣列儲存的,而且是以“\ 0”結尾的。構建一個字元陣列str []用來儲存“abcd”這個字串,用strlen表示索引,當str [strlen] !='\ 0'的時候就++ strlen,這樣就得到了字串的長度。


遞迴法:

#include <stdio.h>
#include <stdlib.h>
int Strlen(char str[]) {
	if (str[0] == '\0') {
		return 0;
	}
	// "abcd" => 'a' "bcd"
	// "bcd" => 'b' "cd"
	// "cd" => 'c' 'd'
	return Strlen(str + 1) + 1;
}
int main() {
	char str[] = "abcd";
	printf("%d\n", Strlen(str));
	system("pause");
	return 0;
}

當str [0] =='\ 0'的時候,字串長度就是0。Strlen(str + 1)+ 1這裡隱式退化成了指標,指向下一個字元的指標。