網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
C語(yǔ)言計(jì)算字符串長(zhǎng)度
思路分析
字符串的結(jié)束標(biāo)志是’\0’,因此計(jì)算字符串的長(zhǎng)度的核心思想就是通過(guò)字符指針順序檢索每一個(gè)字符,直到檢測(cè)到’\0’為止,以下是實(shí)現(xiàn)該算法的幾種方式。
代碼實(shí)現(xiàn)
1.用while循環(huán)實(shí)現(xiàn)
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include<windows.h> int myStrlen(char* str) { ?? ?int count = 0; ?? ?while(*str != '\0') ?? ?{ ?? ??? ?count++;//記錄字符串長(zhǎng)度 ?? ??? ?str++; ?? ?} ?? ?return count; } int main() { ?? ?char arr[] = "bit"; ?? ?int len= myStrlen(arr); ?? ?printf("%d\n", len); ?? ?system("pause"); ?? ?return 0; }
2.用遞歸實(shí)現(xiàn)
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include<windows.h> int myStrlen( char *str) ? { ?? ?if ((str == NULL) || (*str == '\0'))? ?? ?{ ?? ??? ?return 0; ?? ?} ?? ?else { ?? ??? ?return myStrlen(str + 1) + 1; ?? ?} } int main() { ?? ?char arr[] = "bit"; ?? ?int len= myStrlen(arr); ?? ?printf("%d\n", len); ?? ?system("pause"); ?? ?return 0; }
3.另一種遞歸實(shí)現(xiàn)
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include<windows.h> #include <assert.h> int myStrlen(const char *str) ? { ?? ?assert(str != NULL); ?? ?return *str ? (myStrlen(++str) + 1) : 0; } int main() { ?? ?char arr[] = "bit"; ?? ?int len= myStrlen(arr); ?? ?printf("%d\n", len); ?? ?system("pause"); ?? ?return 0; }
計(jì)算字符串長(zhǎng)度的函數(shù)解讀
-
strlen
函數(shù)求得的字符串長(zhǎng)度是從字符串第一個(gè)元素到第一個(gè)'\0'之間元素的個(gè)數(shù)(如果字符串中間有'\0',則結(jié)果不是整個(gè)字符串的長(zhǎng)度),同時(shí)不包括該'\0' -
sizeof
求得的結(jié)果是存儲(chǔ)該字符串的變量占用的空間大小,因而一定會(huì)包括'\0'.若'\0'后還有空余的空間,也會(huì)包含到結(jié)果里面
解釋(與2種求值方式的實(shí)現(xiàn)原理有關(guān)):
1.strlen()的一種實(shí)現(xiàn)就是遍歷字符串,遇到'\0'就終止,因而返回的結(jié)果是第一個(gè)'\0'前字符元素的個(gè)數(shù)
2.sizeof 常用來(lái)求變量占用內(nèi)存空間的大小,因而它返回的是存儲(chǔ)字符串的變量所占用的內(nèi)存空間大小,用來(lái)求字符串的長(zhǎng)度,只在特定情況下可行,即字符數(shù)組剛好被一個(gè)字符串占滿。
在C語(yǔ)言中,與strlen函數(shù)不同的是,sizeof不是一個(gè)函數(shù),而是判斷數(shù)據(jù)類型或者表達(dá)式長(zhǎng)度符的關(guān)鍵字,也可以說(shuō)是C/C++中的一個(gè)操作符(operator),其作用就是返回一個(gè)對(duì)象或者類型所占的內(nèi)存字節(jié)數(shù)。
注意:字節(jié)數(shù)的計(jì)算在程序編譯時(shí)進(jìn)行,而不是在程序執(zhí)行的過(guò)程中才計(jì)算出來(lái)!
數(shù)組的sizeof值等于數(shù)組所占用的內(nèi)存字節(jié)數(shù),如:
char a1[] = "abc"; int a2[3]; sizeof( a1 ); // 結(jié)果為4,字符末尾還存在一個(gè)NULL終止符 sizeof( a2 ); // 結(jié)果為3*4=12(依賴于int)
那么如何求數(shù)組中元素的個(gè)數(shù)呢? (以下兩種方式是等價(jià)的)
int c1= sizeof (a1)/ sizeof ( char ); //總長(zhǎng)度/單個(gè)元素的長(zhǎng)度 ?char型 int c2= sizeof (a2)/ sizeof (a2[0]); //總長(zhǎng)度/第一個(gè)元素的長(zhǎng)度 int型
總結(jié)
原文鏈接:https://blog.csdn.net/qq_42613519/article/details/105275856
相關(guān)推薦
- 2022-10-30 C語(yǔ)言算法練習(xí)之?dāng)?shù)組元素排序_C 語(yǔ)言
- 2022-11-20 Pandas數(shù)據(jù)處理庫(kù)畫圖與文件讀取使用示例_python
- 2023-01-05 python?如何去除字符串中指定字符_python
- 2022-09-21 Python+pandas編寫命令行腳本操作excel的tips詳情_(kāi)python
- 2022-10-28 Kotlin?嵌套函數(shù)開(kāi)發(fā)技巧詳解_Android
- 2022-06-19 C語(yǔ)言詳細(xì)分析宏定義的使用_C 語(yǔ)言
- 2022-11-14 Python中__init__.py文件的作用_python
- 2023-10-15 C++ 實(shí)現(xiàn)基于時(shí)序公平的讀寫鎖
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支