網(wǎng)站首頁 編程語言 正文
C語言計算字符串長度
思路分析
字符串的結束標志是’\0’,因此計算字符串的長度的核心思想就是通過字符指針順序檢索每一個字符,直到檢測到’\0’為止,以下是實現(xiàn)該算法的幾種方式。
代碼實現(xiàn)
1.用while循環(huán)實現(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++;//記錄字符串長度 ?? ??? ?str++; ?? ?} ?? ?return count; } int main() { ?? ?char arr[] = "bit"; ?? ?int len= myStrlen(arr); ?? ?printf("%d\n", len); ?? ?system("pause"); ?? ?return 0; }
2.用遞歸實現(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.另一種遞歸實現(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; }
計算字符串長度的函數(shù)解讀
-
strlen
函數(shù)求得的字符串長度是從字符串第一個元素到第一個'\0'之間元素的個數(shù)(如果字符串中間有'\0',則結果不是整個字符串的長度),同時不包括該'\0' -
sizeof
求得的結果是存儲該字符串的變量占用的空間大小,因而一定會包括'\0'.若'\0'后還有空余的空間,也會包含到結果里面
解釋(與2種求值方式的實現(xiàn)原理有關):
1.strlen()的一種實現(xiàn)就是遍歷字符串,遇到'\0'就終止,因而返回的結果是第一個'\0'前字符元素的個數(shù)
2.sizeof 常用來求變量占用內(nèi)存空間的大小,因而它返回的是存儲字符串的變量所占用的內(nèi)存空間大小,用來求字符串的長度,只在特定情況下可行,即字符數(shù)組剛好被一個字符串占滿。
在C語言中,與strlen函數(shù)不同的是,sizeof不是一個函數(shù),而是判斷數(shù)據(jù)類型或者表達式長度符的關鍵字,也可以說是C/C++中的一個操作符(operator),其作用就是返回一個對象或者類型所占的內(nèi)存字節(jié)數(shù)。
注意:字節(jié)數(shù)的計算在程序編譯時進行,而不是在程序執(zhí)行的過程中才計算出來!
數(shù)組的sizeof值等于數(shù)組所占用的內(nèi)存字節(jié)數(shù),如:
char a1[] = "abc"; int a2[3]; sizeof( a1 ); // 結果為4,字符末尾還存在一個NULL終止符 sizeof( a2 ); // 結果為3*4=12(依賴于int)
那么如何求數(shù)組中元素的個數(shù)呢? (以下兩種方式是等價的)
int c1= sizeof (a1)/ sizeof ( char ); //總長度/單個元素的長度 ?char型 int c2= sizeof (a2)/ sizeof (a2[0]); //總長度/第一個元素的長度 int型
總結
原文鏈接:https://blog.csdn.net/qq_42613519/article/details/105275856
相關推薦
- 2022-06-02 redis?sentinel監(jiān)控高可用集群實現(xiàn)的配置步驟_Redis
- 2022-03-28 c語言經(jīng)典習題之逆序字符串詳解_C 語言
- 2022-10-01 使用flask如何獲取post請求參數(shù)_python
- 2023-01-10 利用C#實現(xiàn)修改圖片透明度功能_C#教程
- 2022-09-03 Go語言函數(shù)的延遲調用(Deferred?Code)詳解_Golang
- 2022-05-28 C語言數(shù)據(jù)結構深入探索順序表_C 語言
- 2022-03-26 android獲取及監(jiān)聽手機網(wǎng)絡狀態(tài)_Android
- 2023-07-28 async await 寫法
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支