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

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

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

strlen()函數(shù)是來源于庫函數(shù)<string.h>
是用于計算字符串的長度,
且字符串需要以'\0'結(jié)尾
strlen()會計算'\0'前的字符個數(shù)。

根據(jù)MSDN的描述

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

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

一、計數(shù)器法

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

int my_strlen(const char* arr)//計數(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)建變量去計算。
先看代碼吧

int my_strlen(const char* p)//遞歸法
{
	while (*p)
	{
		p++;
		my_strlen(p);
		return 1+my_strlen(p);//此時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來接收。同樣的判斷條件,進(jìn)入循環(huán)內(nèi),指針向右移動了一個字節(jié),得到下一個字符的地址,又進(jìn)入函數(shù),再次循環(huán)

舉個例子
以字符串為ab為例

在這里插入圖片描述

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

三,指針減指針法

指針相減,得到的不是指針,而是兩指針間的元素個數(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);
}

因為p會不斷移動,指針指向的地址會改變,所以要先將首地址賦給另一個不會變化的指針。

在這里插入圖片描述

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

代碼都可以運行,所用編譯器為VS2019,記得運行的時候加上頭文件

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

相關(guān)文章

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

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

    遞歸(recursive)函數(shù)是“自己調(diào)用自己”的函數(shù),無論是采用直接或間接調(diào)用方式。間接遞歸意味著函數(shù)調(diào)用另一個函數(shù)(然后可能又調(diào)用第三個函數(shù)等),最后又調(diào)用第一個函數(shù)。因為函數(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)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 通過C++程序示例理解設(shè)計模式中的外觀模式

    通過C++程序示例理解設(shè)計模式中的外觀模式

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

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

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

    利用stream實現(xiàn)一個簡單的http下載器

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

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

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

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

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

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

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

    C++非遞歸建立二叉樹實例

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

最新評論

贵南县| 台江县| 剑川县| 淳安县| 金沙县| 玛沁县| 黎城县| 榆树市| 南平市| 六盘水市| 秭归县| 林周县| 龙游县| 义马市| 宜章县| 博乐市| 江孜县| 高雄县| 都兰县| 城市| 密云县| 天祝| 那曲县| 盐亭县| 闽清县| 苗栗市| 淮滨县| 石楼县| 凌云县| 襄垣县| 博白县| 苏尼特左旗| 遂溪县| 鄄城县| 基隆市| 英山县| 宜兰市| 余姚市| 湘西| 开封市| 若羌县|