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

C語言?模擬實現(xiàn)strlen函數(shù)詳解

 更新時間:2022年04月08日 18:11:08   作者:不一樣的煙火a  
在 C 語言 中我們要獲取 字符串 的長度,可以使用strlen 函數(shù),strlen 函數(shù)計算字符串的長度時,直到空結束字符,但不包括空結束字符,因為 strlen 函數(shù)時不包含最后的結束字符的,因此一般使用 strlen函數(shù)計算的字符串的長度會比使用 sizeof 計算的字符串的字節(jié)數(shù)要小

前言

用C語言模擬實現(xiàn)strlen函數(shù),我這里有三種方法,快來看看跟你用的方法是否是一樣。

一.strlen函數(shù)的介紹

1.strlen函數(shù)的聲明

size_t strlen ( const char * str );

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

2.strlen函數(shù)的簡單運用

用strlen函數(shù)可以求出字符串的長度

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

代碼運行結果

3.注意事項

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

2.參數(shù)指向的字符串必須要以 '\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;
}

代碼運行結果

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

方法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(如果一個數(shù)組沒存滿的話后面的值默認存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;
}

代碼運行結果

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

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

運行結果

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

二.三種實現(xiàn)strlen函數(shù)的方法

三個方法的共同點:

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

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

1.計數(shù)器的方法

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

#include<stdio.h>
#include<assert.h>
 
size_t my_strlen(const char* str)
{
	assert(str != NULL);//判斷傳入的指針是否為空指針
	int count = 0;//創(chuàng)建一個計數(shù)器變量,記錄字符串的長度
	while (*str) //當找到'\0'的時候循環(huán)結束
	{                                                                                                                                                                                                                                                                                                                                                                              
		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.指針-指針的方法

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

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

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

到此這篇關于C語言 模擬實現(xiàn)strlen函數(shù)詳解的文章就介紹到這了,更多相關C語言 strlen函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 使用C++實現(xiàn)工資管理中的隨機教師信息生成功能

    使用C++實現(xiàn)工資管理中的隨機教師信息生成功能

    這篇文章主要介紹了使用C++實現(xiàn)工資管理中的隨機教師信息生成功能,想要做一個教師工資管理系統(tǒng),就必須得準備好數(shù)據(jù),但是這些數(shù)據(jù)如果用手一行一行地敲,那么工作量是非常大的,因此,我就產(chǎn)生了用C語言實現(xiàn)直接生成大量的教師基本信息的想法,需要的朋友可以參考下
    2023-05-05
  • 詳解C++中函數(shù)模板的定義與使用

    詳解C++中函數(shù)模板的定義與使用

    函數(shù)模板實質(zhì)就是參數(shù)化數(shù)據(jù)類型,稱這種編程模式為數(shù)據(jù)類型泛化編程。本文將通過示例來和大家一起了解下C++中函數(shù)模板的定義與使用,需要的可以參考一下
    2022-09-09
  • c語言實現(xiàn)找最大值最小值位置查找

    c語言實現(xiàn)找最大值最小值位置查找

    這篇文章主要介紹了c語言實現(xiàn)找最大值最小值位置查找,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • C語言實現(xiàn)簡單猜拳小游戲

    C語言實現(xiàn)簡單猜拳小游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單猜拳小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • MFC中Radio Button的用法詳解

    MFC中Radio Button的用法詳解

    這篇文章主要介紹了MFC中Radio Button的用法,需要的朋友可以參考下
    2014-07-07
  • C++ 中的INT_MAX,INT_MIN數(shù)值大小操作

    C++ 中的INT_MAX,INT_MIN數(shù)值大小操作

    這篇文章主要介紹了C++ 中的INT_MAX,INT_MIN數(shù)值大小操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • c++ 隊列相關知識總結

    c++ 隊列相關知識總結

    這篇文章主要介紹了c++ 隊列相關知識總結,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下
    2021-03-03
  • VS2019+Opencv4.0+Win10配置詳解

    VS2019+Opencv4.0+Win10配置詳解

    這篇文章主要介紹了VS2019+Opencv4.0+Win10配置詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • c++ TCHAR轉string導致中文缺失或亂碼問題及解決

    c++ TCHAR轉string導致中文缺失或亂碼問題及解決

    這篇文章主要介紹了c++ TCHAR轉string導致中文缺失或亂碼問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C語言實現(xiàn)稀疏矩陣

    C語言實現(xiàn)稀疏矩陣

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)稀疏矩陣的代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05

最新評論

江津市| 榆社县| 得荣县| 南宁市| 怀宁县| 锦州市| 理塘县| 准格尔旗| 吴忠市| 沂水县| 赫章县| 紫云| 东乡| 永和县| 莲花县| 东台市| 大渡口区| 天峨县| 大姚县| 安岳县| 璧山县| 饶平县| 射洪县| 蓬安县| 古交市| 涿州市| 静海县| 吴堡县| 习水县| 八宿县| 婺源县| 大庆市| 江津市| 萝北县| 琼结县| 漠河县| 桂平市| 突泉县| 丰都县| 兴仁县| 乐亭县|