網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
前言
我們知道C語(yǔ)言是自帶內(nèi)置函數(shù)strlen求字符串長(zhǎng)度的,但其實(shí)我們也可以自己編寫函數(shù)來(lái)求字符串長(zhǎng)度
方法一:調(diào)用內(nèi)置函數(shù)strlen求字符串長(zhǎng)度
#include <stdio.h>
#include <string.h>
int main()
{
char s[] = "abc";
int len = strlen(s);
printf("%d ",len);
return 0;
}
方法二:創(chuàng)建臨時(shí)變量計(jì)算字符串長(zhǎng)度
首先,我們自定義函數(shù)my_strlen求字符串長(zhǎng)度
在my_strlen中用count統(tǒng)計(jì)字符的個(gè)數(shù),我們傳入的char類型的指針str,對(duì)他進(jìn)行解引用(*str)得到str指向的值,循環(huán)判斷(*str)是否等于‘\0’,如果不等,則count+1,str指向下一個(gè)字符;如果相等,則說(shuō)明遍歷到了字符串結(jié)尾,最后返回count,也就是統(tǒng)計(jì)的字符的個(gè)數(shù)。
代碼實(shí)現(xiàn)如下:
#include <stdio.h>
int my_strlen(char* str)
{
int count = 0; //計(jì)數(shù)
while(*str != '\0')
{
count++;
str++;
}
return count;
}
int main()
{
char s[] = "abc";
int len = my_strlen(s);
printf("%d ",len);
return 0;
}
方法三:不創(chuàng)建臨時(shí)變量計(jì)算字符串長(zhǎng)度(遞歸)
遞歸的主要思想:大事化小
使用遞歸的兩個(gè)必要條件:
1、存在限制條件,當(dāng)滿足這個(gè)限制條件的時(shí)候,遞歸便不再繼續(xù)
2、每次遞歸調(diào)用之后越來(lái)越接近這個(gè)限制條件
計(jì)算字符串(abc)長(zhǎng)度的遞歸思想:
代碼實(shí)現(xiàn)如下:
#include <stdio.h>
int my_strlen(char* str)
{
if(*str != '\0')
{
return 1 + my_strlen(str+1);
}
else
return 0;
}
int main()
{
char s[] = "abc";
int len = my_strlen(s);
printf("%d ",len);
return 0;
}
方法四:指針減指針求字符串長(zhǎng)度
兩個(gè)指針相減,得到的是兩個(gè)指針之間元素的個(gè)數(shù)
根據(jù)這個(gè)特性,我們可以有一種新的求字符串長(zhǎng)度的思路
代碼實(shí)現(xiàn):
#include <stdio.h>
int my_strlen(char* str)
{
char* start = str;
while(*str)
{
str++;
}
return str - start;
}
int main()
{
char s[] = "abc";
int len = my_strlen(s);
printf("%d ",len);
return 0;
}
注意:
strlen()函數(shù)求出的字符串長(zhǎng)度為有效長(zhǎng)度,既不包含字符串末尾結(jié)束符 ‘\0’;
sizeof()操作符求出的長(zhǎng)度包含字符串末尾的結(jié)束符 ‘\0’;
當(dāng)在函數(shù)內(nèi)部使用sizeof()求解由函數(shù)的形參傳入的字符數(shù)組的長(zhǎng)度時(shí),得到的結(jié)果為指針的長(zhǎng)度,既對(duì)應(yīng)變量的字節(jié)數(shù),而不是字符串的長(zhǎng)度,此處一定要小心。(當(dāng)數(shù)組或者字符串(可以理解為數(shù)組)作為函數(shù)參數(shù)是,是會(huì)當(dāng)做指針來(lái)使用,指針的長(zhǎng)度由編譯器決定,大多數(shù)為4個(gè)byte. )
例如:
void strlen(char* str)
{
int length;
length = sizeof(str)/sizeof(str[0]); //str為4個(gè)字節(jié),str[0] = 1
}
總結(jié)
原文鏈接:https://blog.csdn.net/m0_64051621/article/details/126052572
相關(guān)推薦
- 2022-08-18 C++詳解實(shí)現(xiàn)Stack方法_C 語(yǔ)言
- 2022-03-07 C語(yǔ)言中的rand()和rand_r()詳解_C 語(yǔ)言
- 2022-04-22 docker拉取常用開(kāi)發(fā)工具
- 2022-06-09 FreeRTOS實(shí)時(shí)操作系統(tǒng)空閑任務(wù)的阻塞延時(shí)實(shí)現(xiàn)_操作系統(tǒng)
- 2022-04-21 Tomcat中catalina.out?和?catalina.log的區(qū)別和用途詳解_Tomcat
- 2022-11-05 Python?sklearn庫(kù)三種常用編碼格式實(shí)例_python
- 2023-01-17 用Python實(shí)現(xiàn)的等差數(shù)列方式_python
- 2022-08-26 Python批量將csv文件編碼方式轉(zhuǎn)換為UTF-8的實(shí)戰(zhàn)記錄_python
- 最近更新
-
- 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)程分支