網站首頁 編程語言 正文
前言
我們知道C語言是自帶內置函數strlen求字符串長度的,但其實我們也可以自己編寫函數來求字符串長度
方法一:調用內置函數strlen求字符串長度
#include <stdio.h>
#include <string.h>
int main()
{
char s[] = "abc";
int len = strlen(s);
printf("%d ",len);
return 0;
}
方法二:創建臨時變量計算字符串長度
首先,我們自定義函數my_strlen求字符串長度
在my_strlen中用count統計字符的個數,我們傳入的char類型的指針str,對他進行解引用(*str)得到str指向的值,循環判斷(*str)是否等于‘\0’,如果不等,則count+1,str指向下一個字符;如果相等,則說明遍歷到了字符串結尾,最后返回count,也就是統計的字符的個數。
代碼實現如下:
#include <stdio.h>
int my_strlen(char* str)
{
int count = 0; //計數
while(*str != '\0')
{
count++;
str++;
}
return count;
}
int main()
{
char s[] = "abc";
int len = my_strlen(s);
printf("%d ",len);
return 0;
}
方法三:不創建臨時變量計算字符串長度(遞歸)
遞歸的主要思想:大事化小
使用遞歸的兩個必要條件:
1、存在限制條件,當滿足這個限制條件的時候,遞歸便不再繼續
2、每次遞歸調用之后越來越接近這個限制條件
計算字符串(abc)長度的遞歸思想:
代碼實現如下:
#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;
}
方法四:指針減指針求字符串長度
兩個指針相減,得到的是兩個指針之間元素的個數
根據這個特性,我們可以有一種新的求字符串長度的思路
代碼實現:
#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()函數求出的字符串長度為有效長度,既不包含字符串末尾結束符 ‘\0’;
sizeof()操作符求出的長度包含字符串末尾的結束符 ‘\0’;
當在函數內部使用sizeof()求解由函數的形參傳入的字符數組的長度時,得到的結果為指針的長度,既對應變量的字節數,而不是字符串的長度,此處一定要小心。(當數組或者字符串(可以理解為數組)作為函數參數是,是會當做指針來使用,指針的長度由編譯器決定,大多數為4個byte. )
例如:
void strlen(char* str)
{
int length;
length = sizeof(str)/sizeof(str[0]); //str為4個字節,str[0] = 1
}
總結
原文鏈接:https://blog.csdn.net/m0_64051621/article/details/126052572
相關推薦
- 2022-07-20 C語言詳細講解while語句的用法_C 語言
- 2022-09-03 列表頁常見hook封裝實例_React
- 2023-04-01 c++實現堆排序的示例代碼_C 語言
- 2022-01-04 iframe父子頁面互相調用方法、獲取變量、獲取元素
- 2022-05-22 Python數據結構之隊列詳解_python
- 2022-12-05 python?argparse?模塊命令行參數用法及說明_python
- 2022-06-02 C語言基于EasyX庫實現有圖形界面鐘表_C 語言
- 2022-09-03 Pycharm中運行程序在Python?console中執行,不是直接Run問題_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支