三種方法實現strlen函式
在我們使用C語言寫程式碼時,我們常常會用到strlen函式,你是否好奇過strlen是如何實現的呢?接下來,我將會使用3種方法實現strlen函式。
1.計數器法
計數器法應該是最常見的strlen實現方法,其基本原理就是透過計數器計算迴圈的次數,從而實現計算字串長度的作用
//#include<stdio.h>
//#include<assert.h>
//int my_strlen(const char *str)
//{
// assert(str);
// int count = 0;
// while (*str++ != 0)
// {
// count++;
// }
// return count;
//}
//
//int main()
//{
// char arr[] = {"abcdef"};
// int ret = my_strlen(arr);
// printf("%d", ret);
// return 0;
//}
1.為了防止字串被改變,於是使用const來保護字串,增加程式碼的健壯性 2.使用assert斷言是為了防止傳過來的是空指標
2.遞迴法
遞迴法的主要思想就是要判斷第一字元是不是\0,如果不是就1+下一次函式實現,總的來說就是大事化小的思想。
//遞迴實現strlen
#include<stdio.h>
int my_strlen(char*str)
{
if ((*str) != '\0')
{
return 1 + my_strlen(str + 1);
}
else
return 0;
}
int main()
{
char arr[] = {"abcdef"};
printf("%d", my_strlen(arr));
return 0;
}
3.指標減指標法
首先需要明確,指標減去指標得到的是什麼?是這兩個元素之間的資料的個數。 要使用指標相減,就要找到字串的初末指標,只可以透過尋找\0來實現
//用指標減指標來實現strlen的功能
#include<stdio.h>
int my_strlen(char* str)//str接收首元素a的地址
{
char* start = str;//start裡面裝的是首元素a的地址
while (*str != '\0')//解引用指標str,或者寫成while(*str)---真(更好)
{
str++;//指標/地址++,str是個指標變數
}
return str - start;//指標減指標為兩個指標之間元素的個數
}
int main()
{
int len = my_strlen("abc");
printf("%d", len);
return 0;
}
以上就是strlen的3種實現方法,一個我們平時習以為常的庫函式卻有3種實現方,完全不一樣的實現邏輯,這或許就程式設計的樂趣吧。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70030112/viewspace-2953161/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- strlen函式的模擬實現函式
- 模擬實現字串函式strlen , strcpy ,strcmp字串函式
- strlen函式函式
- C語言-字串函式的實現(一)之strlenC語言字串函式
- Go 函式的三種用法:方法、閉包、實參Go函式
- C++中strlen函式C++函式
- 每天一個 PHP 語法三字串函式 strcmp、strlen 使用及實現PHP字串函式
- 斐波那契數列三種實現函式函式
- [PHP原始碼閱讀]strlen函式PHP原始碼函式
- [譯] 為函式自定義屬性的八種實現方法函式
- 三種方法實現CSS三欄佈局CSS
- 65.C指標---sizeof()函式和strlen()函式常見考指標函式
- PHP 三種方式實現鏈式操作PHP
- 結構體三種例項化方法(含成員函式)結構體函式
- strlen strcat strcpy strcmp 自己實現
- 實現三欄佈局的幾種方法
- 快速排序的三種實現方法 (C++)排序C++
- 元素水平垂直居中三種方法實現
- Java多執行緒【三種實現方法】Java執行緒
- 三種方法實現算出字串中出現多字元字串字元
- python三種屬性管理魔法函式Python函式
- 三欄式佈局的幾種實現方式
- Spring Data JPA中實現更新插入三種方法Spring
- Python佇列的三種佇列實現方法Python佇列
- 分散式鎖初窺-分散式鎖的三種實現方式分散式
- 用函式實現模組化程式設計三函式程式設計
- 函式你必須知道的三種角色?函式
- 函式呼叫的三種方式 __cdecl、__stdcall、__fastcall函式AST
- 三種方法實現:獲取 url 中的引數
- musl中strlen原始碼實現和分析原始碼
- JDK1.8之內建函式式介面(方法引用的實現)JDK函式
- 如何使用OO和函式式兩個方法實現重構? - DZone函式
- Vue 進階系列(三)之Render函式原理及實現Vue函式
- MySQL分析函式實現MySql函式
- MySQL排名函式實現MySql函式
- fcntl函式實現dup函式
- 快速排序三種實現排序
- 分散式鎖解決併發的三種實現方式分散式