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

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

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

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

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

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

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

1、第一種方法(直接)

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

2、第二種方法(遞歸)

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

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

舉個(gè)例子:

若char[]="abc"

1+my_strlen("bc")

1+1+my_strlen("c")

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

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

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

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

四、小結(jié)

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

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

相關(guān)文章

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

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

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

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

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

    C++定義和初始化string對象實(shí)例詳解

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

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

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

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

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

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

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

    談?wù)剉ector的特殊性之為什么它不是STL容器

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

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

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

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

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

    解析VC中預(yù)編譯頭文件的深入分析

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

最新評論

光山县| 怀来县| 营山县| 东丰县| 宣汉县| 太和县| 疏勒县| 武宣县| 宿迁市| 枣庄市| 湖南省| 军事| 庄河市| 虎林市| 米脂县| 阳西县| 东乡| 泰兴市| 棋牌| 太和县| 沅陵县| 临沂市| 二连浩特市| 恭城| 和平区| 青阳县| 武隆县| 怀仁县| 石景山区| 电白县| 金阳县| 绿春县| 凉山| 常德市| 株洲县| 洪雅县| 横峰县| 宣汉县| 玉屏| 盐边县| 衢州市|