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

C語言字符串函數(shù)操作(strlen,strcpy,strcat,strcmp)詳解

 更新時間:2022年01月23日 17:24:43   作者:Li_yizhuoYa  
大家好,本篇文章主要講的是C語言字符串函數(shù)操作(strlen,strcpy,strcat,strcmp)詳解,感興趣的同學(xué)趕快來看一看吧

一.strlen函數(shù)模擬

字符串以‘\0’作為結(jié)束標(biāo)志,strlen函數(shù)返回的是在字符串中‘\0’前面出現(xiàn)的字符個數(shù)(不包括‘\0’);

有三種方法可以實現(xiàn)該操作:

①計數(shù)器方式

②不能創(chuàng)建臨時變量計數(shù)器

③指針-指針

 方法一:計數(shù)器方式

int my_strlen(const char* str)
{
	int count = 0;//定義count用來記錄字符串?dāng)?shù)組中字符數(shù)
	while (*str)
	{
		count++;
		str++;
	}
	return count;
}

方法二:不能創(chuàng)建臨時變量計數(shù)器

int my_strlen1(const char* str)//以遞歸的方式完成字符串長度函數(shù)的模擬
{
	if (*str == '\0')
		return 0;
	return 1 + my_strlen1(str + 1);
}

方法三:指針-指針

指針相減得到的是兩個指針之間差距的元素個數(shù),可以根據(jù)這種方式來實現(xiàn)strlen函數(shù)的模擬

int my_strlen2(char* s)//以此方式進(jìn)行模擬時不能使用靜態(tài)const
{
	char* p = s;
	while (*p != '\0')
		p++;
	return p - s;
}

測試樣例

二. strcpy函數(shù)模擬

將src所指向的字符串包括‘\0’復(fù)制到dest所指向的字符串中

源字符串(src所指向的字符串)必須以‘\0’結(jié)束

目標(biāo)空間需足夠大,以確保能存放源字符串

int main()
{
	char s[10] = { 'a','b','c','d','e','f' };
	char s1[10] = { 'c','c','b' };
	printf("%s", my_strcpy(s, s1));//將s1中的字符復(fù)制到s空間中
	return 0;
}
char* my_strcpy(char* dest, const char* src)
{
	char* ret = dest;
	assert(dest != NULL);//斷言
	assert(src != NULL);//斷言
	while ((*dest++ = *src++));
	return ret;
}

測試結(jié)果 

最終將s2中以‘\0’為結(jié)束符的字符串復(fù)制到s中 

 三.strcat函數(shù)模擬

將src所指向的字符串包括‘\0’復(fù)制到dest所指向的字符串后面

源字符串必須以‘\0’結(jié)束

目標(biāo)空間*dest需足夠大,以確保能夠存放源字符串(*src)

char* my_strcat(char* dest, const char* src)
{
	char* ret = dest;
	assert(dest != NULL);
	assert(src != NULL);
	while (*dest)//訪問到dest所指向字符串的最后一個字符位置
	{
		dest++;
	}
	while ((*dest++ = *src++));//將src指向的字符串復(fù)制到dest所指向字符串的后面
	return ret;
}

 測試樣例

將src指向的字符串復(fù)制到dest指向的字符串后面,最終得到結(jié)果

四.strcmp函數(shù)模擬

 strcmp函數(shù)的作用是比較字符串,用法如下strcmp(字符串1,字符串2),它會比較這兩個字符串:

如果字符串1等于字符串2,strcmp函數(shù)返回0;

如果字符串1小于字符串2,strcmp函數(shù)返回一個負(fù)值;

如果字符串1大于字符串2,strcmp函數(shù)返回一個正值.

 具體實現(xiàn)如下:

int my_strcmp(const char* dest, const char* src)
{
	int ret = 0;
	assert(src != NULL);
	assert(dest != NULL);
	while (!(ret = *(unsigned char*)src - *(unsigned char*)dest) && *dest)
	{
		++src;
		++dest;
	}
	if (ret < 0)
		ret = -1;
	else if (ret > 0)
		ret = 1;
	return ret;
}

總結(jié)

到此這篇關(guān)于C語言字符串函數(shù)操作(strlen,strcpy,strcat,strcmp)詳解的文章就介紹到這了,更多相關(guān)C語言字符串函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++標(biāo)準(zhǔn)庫封裝的vector數(shù)組

    C++標(biāo)準(zhǔn)庫封裝的vector數(shù)組

    這篇文章主要介紹了C++標(biāo)準(zhǔn)庫封裝的vector數(shù)組,vector創(chuàng)建的對象包含眾多封裝好的函數(shù),想了解其相關(guān)資料的小伙伴可以參考下面文章內(nèi)容,希望對你的學(xué)習(xí)有所幫助
    2022-03-03
  • C++函數(shù)的嵌套調(diào)用和遞歸調(diào)用學(xué)習(xí)教程

    C++函數(shù)的嵌套調(diào)用和遞歸調(diào)用學(xué)習(xí)教程

    這篇文章主要介紹了C++函數(shù)的嵌套調(diào)用和遞歸調(diào)用學(xué)習(xí)教程,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • C++ Boost Thread線程使用示例詳解

    C++ Boost Thread線程使用示例詳解

    Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱
    2022-11-11
  • C++實現(xiàn)String與UF8互轉(zhuǎn)

    C++實現(xiàn)String與UF8互轉(zhuǎn)

    這篇文章介紹了C++實現(xiàn)String與UF8互轉(zhuǎn)的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • C++中 STL list詳解及簡單實例

    C++中 STL list詳解及簡單實例

    這篇文章主要介紹了C++中 STL list詳解及簡單實例的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 純C語言實現(xiàn)火車售票系統(tǒng)

    純C語言實現(xiàn)火車售票系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了純C語言實現(xiàn)火車售票系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • C++控制臺實現(xiàn)隨機(jī)生成路徑迷宮游戲

    C++控制臺實現(xiàn)隨機(jī)生成路徑迷宮游戲

    這篇文章主要為大家詳細(xì)介紹了C++控制臺實現(xiàn)隨機(jī)生成路徑迷宮游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • QT編寫地圖實現(xiàn)獲取區(qū)域邊界

    QT編寫地圖實現(xiàn)獲取區(qū)域邊界

    區(qū)域邊界是一些坐標(biāo)點(diǎn)集合,而且不同的行政區(qū)劃得到的區(qū)域邊界點(diǎn)數(shù)組集合個數(shù)不同。本文將具體介紹QT在編寫地圖時如何實現(xiàn)獲取區(qū)域邊界,需要的可以參考一下
    2022-01-01
  • 不要被C++(自動生成規(guī)則)所蒙騙

    不要被C++(自動生成規(guī)則)所蒙騙

    正如標(biāo)題所說,我們不要被C++語法中所描述的那些條條框框所“蒙騙”了。的確,相信這些生成規(guī)則不會對我們的編程帶來多大的影響(不會產(chǎn)生錯誤),但是只有了解它們的背后操作,我們才知道編譯器究竟為我們做了什么,感興趣的朋友可以了解下,希望本文對你有所幫助
    2013-01-01
  • 從零學(xué)習(xí)cmake構(gòu)建系統(tǒng)

    從零學(xué)習(xí)cmake構(gòu)建系統(tǒng)

    這篇文章主要為大家介紹了從零學(xué)習(xí)cmake構(gòu)建系統(tǒng)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02

最新評論