最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中strlen函數(shù)的三種實現(xiàn)方法

 更新時間:2022年05月09日 08:39:22   作者:菜菜不恰菜  
在C語言中我們要獲取字符串的長度,可以使用strlen?函數(shù),strlen?函數(shù)計算字符串的長度時,直到空結(jié)束字符,但不包括空結(jié)束字符,因為strlen函數(shù)時不包含最后的結(jié)束字符的,因此一般使用strlen函數(shù)計算的字符串的長度會比使用sizeof計算的字符串的字節(jié)數(shù)要小

一、strlen函數(shù)是什么

我們經(jīng)常用到strlen這個函數(shù)求字符串長度,但是它是怎么實現(xiàn)的呢?接下來讓給我用三種方法帶你們看看它是如何實現(xiàn)?

首先我們先來了解一下strlen這個函數(shù),strlen 是求字符串長度的函數(shù),它的返回值是size_t,就是unsigned int。字符串以'\0'作為結(jié)束標志,strlen函數(shù)返回的值就是在字符串中'\0'的前面出現(xiàn)的個數(shù)(不包含'\0')。所以我們在想strlen 是怎么實現(xiàn)的就可以從這里入手,從第一個字符開始找起,找到'\0'結(jié)束,計算個數(shù)。

二、strlen的三種實現(xiàn)方法

1、第一種方法(直接)

size_t my_strlen( const char* str)//字符串是放在常量字符串中,不能被改變,所以這里最好用用const修飾一下下啦
{
	assert(str != NULL);//p如果接收過來的是空指針,那么這里運行會崩潰的,所以這里用assert函數(shù)斷言一下
	int count = 0;//計數(shù)
	while (*str != '\0')
	{
		count++;//當它的字符不等于'\0'時,計數(shù)加一
		str++;//再往下一個字符找
	}
	return count;
}

2、第二種方法(遞歸)

size_t my_strlen(const char* str)//字符串是放在常量字符串中,不能被改變,所以這里最好用用const修飾一下下啦
{
	assert(str != NULL);//p如果接收過來的是空指針,那么這里運行會崩潰的,所以這里用assert函數(shù)診斷一下
	 if (*str != '\0')
	 {
	  return 1+my_strlen(str+1);
	 }
	 else
	 {
		 return 0;
	 }
}

return 1+my_strlen(str+1);//這里意思是說當首字符不等于'\0'說明這個字符串至少有一個字符

舉個例子:

若char[]="abc"

1+my_strlen("bc")

1+1+my_strlen("c")

1+1+1+my_strlen("")--------1+1+1+0(空字符串第一個字符就是'\0')

3、第三種方法(指針-指針)

兩個指針相減,得到的是兩個指針之間元素的個數(shù)。我們先用一個指針放首字符地址,然后再找到最后一個字符的地址,用最后一個字符地址減去第一個字符地址,就是他們之間元素個數(shù)。

size_t my_strlen(const char* str)//字符串是放在常量字符串中,不能被改變,所以這里最好用用const修飾一下下啦
{
	assert(str != NULL);//p如果接收過來的是空指針,那么這里運行會崩潰的,所以這里用assert函數(shù)診斷一下
	const char* start = str;//定義一個指針放字符串首字符的地址,因為*str接收的字符串為常量字符串,所以這里最好也用const修飾一下
	while (*str != '\0')
	{
		str++;
	}
	return str - start;
}

四、小結(jié)

以上就是strlen 函數(shù)的三種實現(xiàn)方法,我平常在用這個函數(shù)時可能很少會去關心它是怎么實現(xiàn)的,直接用就完了,但是了解一個函數(shù)是怎么實現(xiàn)的對于理解是有好處的。

到此這篇關于C++中strlen函數(shù)的三種實現(xiàn)方法的文章就介紹到這了,更多相關C++ strlen內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C語言手撕一個Hash表(HashTable)實例代碼

    C語言手撕一個Hash表(HashTable)實例代碼

    哈希表(HashTable)是一種非常重要的數(shù)據(jù)結(jié)構(gòu),它可以在常量時間內(nèi)進行插入、查找和刪除操作,下面這篇文章主要給大家介紹了關于C語言手撕一個Hash表(HashTable)的相關資料,需要的朋友可以參考下
    2023-03-03
  • C語言實現(xiàn)簡易版掃雷游戲

    C語言實現(xiàn)簡易版掃雷游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡易版掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • C++定義和初始化string對象實例詳解

    C++定義和初始化string對象實例詳解

    這篇文章主要為大家介紹了C++定義和初始化string對象實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • C++11中多線程編程-std::async的深入講解

    C++11中多線程編程-std::async的深入講解

    這篇文章主要給大家介紹了關于C++11中多線程編程-std::async的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • C++中繼承與組合的區(qū)別詳細解析

    C++中繼承與組合的區(qū)別詳細解析

    C++的“繼承”特性可以提高程序的可復用性。正因為“繼承”太有用、太容易用,才要防止亂用“繼承”
    2013-09-09
  • C++菱形繼承和虛繼承的實現(xiàn)

    C++菱形繼承和虛繼承的實現(xiàn)

    本文主要介紹了C++菱形繼承和虛繼承的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • 談談vector的特殊性之為什么它不是STL容器

    談談vector的特殊性之為什么它不是STL容器

    這篇文章主要給大家介紹了關于vector的特殊性之為什么它不是STL容器的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用c++具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-08-08
  • 基于C語言實現(xiàn)的貪吃蛇游戲完整實例代碼

    基于C語言實現(xiàn)的貪吃蛇游戲完整實例代碼

    這篇文章主要介紹了基于C語言實現(xiàn)的貪吃蛇游戲完整實例代碼,對于學習游戲開發(fā)的朋友有一定的借鑒價值,需要的朋友可以參考下
    2014-08-08
  • C/C++使用fmt庫實現(xiàn)格式化字符串

    C/C++使用fmt庫實現(xiàn)格式化字符串

    fmt庫是一個高效、易用的C++格式化庫,可以幫助我們方便地進行字符串格式化、輸出、日志記錄等操作,下面我們就來學習一下fmt格式化字符串的具體操作吧
    2023-12-12
  • 解析VC中預編譯頭文件的深入分析

    解析VC中預編譯頭文件的深入分析

    本篇文章是對VC中預編譯頭文件進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05

最新評論

米易县| 英超| 南平市| 岳池县| 新干县| 南昌市| 兴城市| 奇台县| 乐安县| 彩票| 彭州市| 阿拉善盟| 呼和浩特市| 固始县| 长子县| 上虞市| 壤塘县| 武安市| 阜新市| 来宾市| 宁都县| 高安市| 即墨市| 福安市| 江西省| 昔阳县| 宕昌县| 横峰县| 虹口区| 金溪县| 苗栗市| 巴塘县| 武宁县| 侯马市| 蒲城县| 卢氏县| 巴楚县| 南溪县| 深泽县| 湛江市| 闻喜县|