亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言怎么模擬實現strlen函數

發布時間:2022-04-11 14:13:35 來源:億速云 閱讀:96 作者:iii 欄目:開發技術

這篇文章主要講解了“C語言怎么模擬實現strlen函數”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C語言怎么模擬實現strlen函數”吧!

一.strlen函數的介紹

1.strlen函數的聲明

size_t strlen ( const char * str );

這里函數的返回值為無符號整形(size_t),傳入的是一個常量char*類型的指針。

2.strlen函數的簡單運用

用strlen函數可以求出字符串的長度

#include<stdio.h>
#include<string.h>
int main()
{
	char str[] = "qwerty";
	int ret = strlen(str);
	printf("字符串的長度 = %d\n", ret);
	return 0;
}

代碼運行結果

C語言怎么模擬實現strlen函數

3.注意事項

1.字符串是以 '\0' 作為結束標志,strlen函數返回的是在字符串中 '\0' 前面出現的字符個數(不包含 '\0' )。

2.參數指向的字符串必須要以 '\0' 結束。

如果不是以'\0'結束,輸出結果將是一個隨機值,例如:

#include<stdio.h>
#include<string.h>
 
int main()
{
	char str[] = { 'a', 'b', 'c' };//這里沒有以'\0'結束
	int ret = strlen(str);
	printf("字符串的長度 = %d\n", ret);
	return 0;
}

代碼運行結果

C語言怎么模擬實現strlen函數

 其實這個代碼的修改方法也很簡單,例如:

方法1

#include<stdio.h>
#include<string.h>
 
int main()
{
	char str[] = { 'a', 'b', 'c', '\0'};
	int ret = strlen(str);
	printf("字符串的長度 = %d\n", ret);
	return 0;
}

方法2(如果一個數組沒存滿的話后面的值默認存0,而'\0'的ASCII碼值就是0)

#include<stdio.h>
#include<string.h>
 
int main()
{
	char str[5] = { 'a', 'b', 'c'};
	int ret = strlen(str);
	printf("字符串的長度 = %d\n", ret);
	return 0;
}

代碼運行結果

C語言怎么模擬實現strlen函數

3.注意函數的返回值為size_t,是無符號的整形( 易錯 )

#include<stdio.h>
#include<string.h>
 
int main()
{
	if (strlen("abc") - strlen("abcdefg") > 0)
	{
		printf(">\n");
	}
	else
	{
		printf("<=\n");
	}
	return 0;
}

運行結果

C語言怎么模擬實現strlen函數

出現這個>符號的結果的原因就在于函數的返回值為size_t,是無符號的整形,兩個無符號整形的數字相減得到的還是一個無符號整形,雖然這兩個字符串長度相減得到的是-3,但是編譯器會把他當成無符號的整形,把-3當成無符號整形將會是一個很大的正整數,所以輸出的結果是>符號。(這是一個易錯點)

二.三種實現strlen函數的方法

三個方法的共同點:

1.都要用const修飾指針,因為傳址進來后只需要判斷這字符串的長度,并不需要修改字符串的值,所以要用const修飾,這樣使其更安全。

2.都要用assert斷言,斷言傳來的指針不能為空指針,因為空指針是不能被訪問的。

1.計數器的方法

這是最普通的方法,創建一個計數器變量,然后就開始找'\0',每經過一個字符,計數器就+1,直到找到'\0'為止。最后將計數器的值返回。

#include<stdio.h>
#include<assert.h>
 
size_t my_strlen(const char* str)
{
	assert(str != NULL);//判斷傳入的指針是否為空指針
	int count = 0;//創建一個計數器變量,記錄字符串的長度
	while (*str) //當找到'\0'的時候循環結束
	{                                                                                                                                                                                                                                                                                                                                                                              
		count++;//記錄字符串的長度
		str++;
	}
	return count;
}
int main()
{
	char str[] = "qwerty";
	int ret = my_strlen(str);
	printf("%d", ret);
	return 0;
}

2.遞歸方法

一時遞歸一時爽,一直遞歸一直爽。(講解全在注釋里面,嘻嘻)

#include<stdio.h>
#include<assert.h>
 
size_t my_strlen(const char* str)
{
	assert(str != NULL);//判斷傳入的指針是否為空指針
	if (*str)//一直遞歸,直到找到'\0'為止
	{
		str++;
		return (1 + my_strlen(str));//遞歸,并返回1+記錄字符串長度
	}
	return 0;
}
int main()
{
	char str[] = "qwerty";
	int ret = my_strlen(str);
	printf("%d", ret);
	return 0;
}

3.指針-指針的方法

我們都知道指針-指針的結果是他們之間元素的個數(因為這個我在指針初階篇將過,嘻嘻),這個方法就是利用這個原理來寫的。所以我們只用找到字符串首字符的地址和'\0'的地址,然后相減就可以得到字符串的長度了。

#include<stdio.h>
#include<assert.h>
 
size_t my_strlen(const char* str)
{
	assert(str != NULL);//判斷傳入的指針是否為空指針
	const char* start = str;//創建一個存儲首字符地址的指針,注意也要用const修飾,保持類型一致
	while (*str)//找'\0'的地址
	{
		str++;
	}
	return (str - start);//指針('\0'的地址) - 指針(首字符的地址) = 中間字符的個數
}
int main()
{
	char str[] = "qwerty";
	int ret = my_strlen(str);
	printf("字符串的長度 = %d\n", ret);
	return 0;
}

三種方法的運行結果都是一樣的

C語言怎么模擬實現strlen函數

感謝各位的閱讀,以上就是“C語言怎么模擬實現strlen函數”的內容了,經過本文的學習后,相信大家對C語言怎么模擬實現strlen函數這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

承德市| 蓬溪县| 桂平市| 汕头市| 隆回县| 雷波县| 惠州市| 龙川县| 建湖县| 白银市| 武穴市| 鄂伦春自治旗| 漾濞| 遂昌县| 衡阳县| 贵定县| 鲜城| 闵行区| 潜江市| 公安县| 临邑县| 上蔡县| 娱乐| 三江| 贺兰县| 工布江达县| 贵溪市| 介休市| 体育| 汕尾市| 方正县| 乌苏市| 凌云县| 安国市| 富平县| 泗洪县| 都匀市| 交口县| 龙门县| 军事| 盘山县|