題21:編寫函式字串長度,要求不使用strlen()函式,抑或不使用遞迴的方法
阿新 • • 發佈:2021-02-19
技術標籤:程式設計 題
//編寫函式不允許使用strlen(),求字串長度
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int my_strlen(char* str)//陣列傳參不是整個陣列,而是首元素的地址
{//既然是地址,那就引*p,根據地址找名字
int count = 0;
while (*str != '\0')
{
count++;
str++;//移動指標的辦法,是++
}
return count;
}
int main()
{
char arr[] = "bit";
//int len = strlen(arr);//strlen數字符串長度,是不含\0的
//printf("%d", len);
int len = my_strlen(arr);
printf("len=%d\n",len);
return 0;
}
以下是用遞迴方法
//編寫函式使用遞迴方法,求字串長度
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int my_strlen(char* str)
{
if (*str != '\0')
return 1 + my_strlen(str + 1);
else
return 0;
}
int main()
{
char arr[] = "bit";
//int len = strlen(arr);//strlen數字符串長度,是不含\0的
//printf("%d", len);
int len = my_strlen(arr);
printf("len=%d\n",len);
return 0;
}
//整理思路,遞迴的方法,大事化小
//my_strlen("bit"),可以分解成為
//1+my_strlen("it"),這兩部分,再進一步是
//1+1+my_strlen("t"),這三部分,再進一步是
//1+1+1+my_strlen(""),這四部分。
//這樣1+1+1+0=3
看懂遞迴的程式,就得畫圖,直觀看是看不出來得,分成2部分,然後再丟擲其中一部分,分析剩下得部分,還是再分2部分,每次都要拋去一部分,不斷得把問題層層簡化。
遵循一個原則:
判斷條件寫停下來;
函式內容寫不斷的趨近停下來。