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

C語(yǔ)言編程之三個(gè)方法實(shí)現(xiàn)strlen函數(shù)

 更新時(shí)間:2021年09月17日 14:19:44   作者:Booksort  
本篇文章是C語(yǔ)言編程篇,主要為大家介紹C語(yǔ)言編程中實(shí)現(xiàn)strlen函數(shù)的三個(gè)方法講解,有需要的朋友可以借鑒參考下,希望可以有所幫助

strlen()函數(shù)是來(lái)源于庫(kù)函數(shù)<string.h>
是用于計(jì)算字符串的長(zhǎng)度,
且字符串需要以'\0'結(jié)尾
strlen()會(huì)計(jì)算'\0'前的字符個(gè)數(shù)。

根據(jù)MSDN的描述

size_t strlen(const char* string);
size_t==unsigned int;

返回-無(wú)符號(hào)整型。
現(xiàn)在提供三種方法實(shí)現(xiàn)strlen()

一、計(jì)數(shù)器法

我們是計(jì)算字符個(gè)數(shù),可以設(shè)置一個(gè)變量,每找到一個(gè)字符,計(jì)數(shù)器就加一。

int my_strlen(const char* arr)//計(jì)數(shù)器的方法
{
	assert(arr);
	int count = 0;
	while (*arr)//條件是*arr!='\0',但'\0'也是數(shù)字0,且條件是0為假,非0為真
	{
		count++;
		arr++;
	}
	return count;
}
int main(void)
{
	char arr[] = "abcdef";
	int len = my_strlen(arr);
	printf("len = %d\n", len);
	return 0;
}

二、遞歸法

遞歸可以不創(chuàng)建變量去計(jì)算。
先看代碼吧

int my_strlen(const char* p)//遞歸法
{
	while (*p)
	{
		p++;
		my_strlen(p);
		return 1+my_strlen(p);//此時(shí)p已經(jīng)是進(jìn)入循環(huán)的p+1;
	}
	return 0;
	
}
int main(void)
{
	char arr[] = "abcde";
	int len = my_strlen(arr);
	printf("len = %d\n", len);
	return 0;
}

傳了arr數(shù)組名進(jìn)去,用p來(lái)接收。同樣的判斷條件,進(jìn)入循環(huán)內(nèi),指針向右移動(dòng)了一個(gè)字節(jié),得到下一個(gè)字符的地址,又進(jìn)入函數(shù),再次循環(huán)

舉個(gè)例子
以字符串為ab為例

在這里插入圖片描述

最后解引用得到‘\0',返回0。則上一級(jí)函數(shù)返回1+下一級(jí)函數(shù)的返回值(0),再返回上一級(jí)函數(shù),且他的返回值是1+1+0。正好是2

三,指針減指針?lè)?/h2>

指針相減,得到的不是指針,而是兩指針間的元素個(gè)數(shù)。

思路:我們找到首字符的指針,再找到‘\0'的指針,返回兩指針相減的值。

看代碼

int my_strlen(const char* p)//指針相減法
{
	char* ret = p;
	while (*p)
	{
		p++;
	}
	return p - ret;

}
int main(void)
{
	char arr[] = "abcdef";
	int len = my_strlen(arr);
	printf("len = %d\n", len);
}

因?yàn)閜會(huì)不斷移動(dòng),指針指向的地址會(huì)改變,所以要先將首地址賦給另一個(gè)不會(huì)變化的指針。

在這里插入圖片描述

這張圖就相當(dāng)明顯了。

代碼都可以運(yùn)行,所用編譯器為VS2019,記得運(yùn)行的時(shí)候加上頭文件

以上就是C語(yǔ)言編程之三個(gè)方法實(shí)現(xiàn)strlen()的詳細(xì)內(nèi)容,更多關(guān)于C語(yǔ)言實(shí)現(xiàn)strlen()的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C語(yǔ)言運(yùn)用函數(shù)的遞歸實(shí)現(xiàn)漢諾塔

    C語(yǔ)言運(yùn)用函數(shù)的遞歸實(shí)現(xiàn)漢諾塔

    遞歸(recursive)函數(shù)是“自己調(diào)用自己”的函數(shù),無(wú)論是采用直接或間接調(diào)用方式。間接遞歸意味著函數(shù)調(diào)用另一個(gè)函數(shù)(然后可能又調(diào)用第三個(gè)函數(shù)等),最后又調(diào)用第一個(gè)函數(shù)。因?yàn)楹瘮?shù)不可以一直不停地調(diào)用自己,所以遞歸函數(shù)一定具備結(jié)束條件
    2022-07-07
  • C++11 Unicode編碼轉(zhuǎn)換

    C++11 Unicode編碼轉(zhuǎn)換

    這篇文章主要介紹了C++11 Unicode編碼轉(zhuǎn)換的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c++11,感興趣的朋友可以了解下
    2020-08-08
  • C++中for循環(huán)與while循環(huán)的區(qū)別總結(jié)

    C++中for循環(huán)與while循環(huán)的區(qū)別總結(jié)

    這篇文章主要給大家介紹了關(guān)于C++中for循環(huán)與while循環(huán)的區(qū)別的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 通過(guò)C++程序示例理解設(shè)計(jì)模式中的外觀(guān)模式

    通過(guò)C++程序示例理解設(shè)計(jì)模式中的外觀(guān)模式

    這篇文章主要介紹了通過(guò)設(shè)計(jì)模式中的外觀(guān)模式及相關(guān)的C++程序示例,外觀(guān)模式在高層提供了一個(gè)統(tǒng)一的接口實(shí)現(xiàn)一定程度上的解耦,需要的朋友可以參考下
    2016-03-03
  • C語(yǔ)言?分析逆序字符串與字符串的逆序輸出有什么區(qū)別

    C語(yǔ)言?分析逆序字符串與字符串的逆序輸出有什么區(qū)別

    例如,給定一個(gè)字符串?s,將?s?中的字符順序顛倒過(guò)來(lái),如?s?=?“abcd”,逆序后變成?“dcba”??梢圆捎枚喾N方法對(duì)字符串進(jìn)行逆序,以下將對(duì)其中的方法和字符串的逆序輸出的區(qū)別進(jìn)行分析
    2022-04-04
  • 利用stream實(shí)現(xiàn)一個(gè)簡(jiǎn)單的http下載器

    利用stream實(shí)現(xiàn)一個(gè)簡(jiǎn)單的http下載器

    這篇文章主要介紹了利用stream實(shí)現(xiàn)一個(gè)簡(jiǎn)單的http下載器的相關(guān)資料,需要的朋友可以參考下
    2015-03-03
  • VS2017+Qt5+Opencv3.4調(diào)用攝像頭拍照并存儲(chǔ)

    VS2017+Qt5+Opencv3.4調(diào)用攝像頭拍照并存儲(chǔ)

    本文主要介紹了VS2017+Qt5+Opencv3.4調(diào)用攝像頭拍照并存儲(chǔ),實(shí)現(xiàn)了視頻,拍照,保存這三個(gè)功能。具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • C++ 中回文數(shù)判斷簡(jiǎn)單實(shí)例

    C++ 中回文數(shù)判斷簡(jiǎn)單實(shí)例

    這篇文章主要介紹了C++ 中回文數(shù)判斷簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 基于C++實(shí)現(xiàn)的線(xiàn)程休眠代碼

    基于C++實(shí)現(xiàn)的線(xiàn)程休眠代碼

    這篇文章主要介紹了基于C++實(shí)現(xiàn)的線(xiàn)程休眠代碼,包括了Linux平臺(tái)及基于boost庫(kù)的兩種實(shí)現(xiàn)方法,有不錯(cuò)的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-10-10
  • C++非遞歸建立二叉樹(shù)實(shí)例

    C++非遞歸建立二叉樹(shù)實(shí)例

    這篇文章主要介紹了C++非遞歸建立二叉樹(shù)的方法,實(shí)例分析了二叉樹(shù)的原理與C++實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04

最新評(píng)論

文昌市| 郸城县| 二手房| 南乐县| 喜德县| 安阳县| 兰考县| 沈阳市| 临洮县| 丹凤县| 岗巴县| 新龙县| 陆川县| 丰镇市| 和硕县| 东乌珠穆沁旗| 广饶县| 绥化市| 遵义市| 安庆市| 伊通| 天长市| 库伦旗| 彭阳县| 宜都市| 康乐县| 彰化县| 临泉县| 营山县| 哈巴河县| 承德县| 厦门市| 张掖市| 高邮市| 泸定县| 瑞丽市| 隆林| 和龙市| 石城县| 达州市| 泸州市|