亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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ù)器就加一。

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)是進入循環(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ù)組名進去,用p來接收。同樣的判斷條件,進入循環(huán)內(nèi),指針向右移動了一個字節(jié),得到下一個字符的地址,又進入函數(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會不斷移動,指針指向的地址會改變,所以要先將首地址賦給另一個不會變化的指針。

在這里插入圖片描述

這張圖就相當明顯了。

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

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

相關(guān)文章

  • C++實現(xiàn)中綴表達式轉(zhuǎn)化為后綴表達式詳解

    C++實現(xiàn)中綴表達式轉(zhuǎn)化為后綴表達式詳解

    這篇文章主要為大家詳細介紹了如何利用C++解決實現(xiàn)中綴表達式轉(zhuǎn)換為后綴表達式的問題,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C語言猜兇手的代碼實現(xiàn)

    C語言猜兇手的代碼實現(xiàn)

    本文主要介紹了C語言猜兇手的代碼實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • C++數(shù)據(jù)結(jié)構(gòu)之list詳解

    C++數(shù)據(jù)結(jié)構(gòu)之list詳解

    list是一種序列式容器。list容器完成的功能實際上和數(shù)據(jù)結(jié)構(gòu)中的雙向鏈表是極其相似的,list中的數(shù)據(jù)元素是通過鏈表指針串連成邏輯意義上的線性表,也就是list也具有鏈表的主要優(yōu)點,即:在鏈表的任一位置進行元素的插入、刪除操作都是快速的
    2021-11-11
  • C++實現(xiàn)list增刪查改模擬的示例代碼

    C++實現(xiàn)list增刪查改模擬的示例代碼

    本文主要介紹了C++實現(xiàn)list增刪查改模擬,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-12-12
  • C++ 簡單的任務隊列詳解

    C++ 簡單的任務隊列詳解

    下面小編就為大家?guī)硪黄狢++ 簡單的任務隊列詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • 使用Qt的QChartView實現(xiàn)縮放和放大功能

    使用Qt的QChartView實現(xiàn)縮放和放大功能

    QCustomPlot是一個小型的Qt畫圖標類,支持繪制靜態(tài)曲線、動態(tài)曲線、多重坐標曲線,柱狀圖,蠟燭圖,這篇文章主要介紹了Qt的QChartView實現(xiàn)縮放和放大功能,需要的朋友可以參考下
    2022-09-09
  • C語言 從根本上理解指針

    C語言 從根本上理解指針

    C語言這門課程在計算機的基礎(chǔ)教學中一直占有比較重要的地位,然而要想突破C語言的學習,對指針的掌握是非常重要的,本文將具體針對指針的基礎(chǔ)做詳盡的介紹
    2022-04-04
  • 基于C++的攝像頭圖像采集及拼接程序的簡單實現(xiàn)

    基于C++的攝像頭圖像采集及拼接程序的簡單實現(xiàn)

    本程序是在?ubuntu14.04?平臺下實現(xiàn)的,在本項目目錄下,已經(jīng)有編譯生成的可執(zhí)行程序,其中Camera_to_Frmae.cpp是我們從雙攝像頭實時抓取單幀圖像的源碼,對基于C++的攝像頭圖像采集及拼接程序的實現(xiàn)感興趣的朋友一起看看吧
    2022-01-01
  • C++軟件添加dump調(diào)試打印日志(推薦)

    C++軟件添加dump調(diào)試打印日志(推薦)

    下面小編就為大家?guī)硪黄狢++軟件添加dump調(diào)試打印日志(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • C++超詳細講解運算符重載

    C++超詳細講解運算符重載

    本文包括了對C++類的6個默認成員函數(shù)中的賦值運算符重載和取地址和const對象取地址操作符的重載。運算符是程序中最最常見的操作,例如對于內(nèi)置類型的賦值我們直接使用=賦值即可,因為這些編譯器已經(jīng)幫我們做好了,但是對象的賦值呢?能直接賦值嗎
    2022-06-06

最新評論