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

C語言詳解strcmp函數(shù)的分析及實(shí)現(xiàn)

 更新時(shí)間:2022年05月09日 16:20:18   作者:<vince>  
strcmp函數(shù)語法為“int strcmp(char *str1,char *str2)”,其作用是比較字符串str1和str2是否相同,如果相同則返回0,如果不同,前者大于后者則返回1,否則返回-1

1.函數(shù)介紹

1.1.函數(shù)接口

int __cdecl strcmp (const char * src,const char * dst);

這里是庫函數(shù)里面的函數(shù)定義接口。這個函數(shù)是將 src 和 dst 兩個字符串進(jìn)行比較,即為字符串比較函數(shù)。

1.2.函數(shù)分析

分析:

1、strcmp 函數(shù)是比較兩個字符串中字符的順序的。實(shí)際上是拿其字符的ASCⅡ碼值來進(jìn)行比較;

2、拿第一個字符串中的第一字符值減去第二個字符串中的第一個字符,如果為 0,則繼續(xù)向下比較;若不為 0,則返回差值的數(shù)。

3、標(biāo)準(zhǔn)規(guī)定:

  • 第一個字符串大于第二個字符串,則返回大于 0 的數(shù)字;
  • 第一個字符串等于第二個字符串,則返回 0;
  • 第一個字符串小于第二個字符串,則返回小于 0 的數(shù)字。

1.3.函數(shù)的簡單使用

#include <stdio.h>
#include <string.h>
int main()
{
	char ch1[] = "fbcd";
	char ch2[] = "ab";
	int ret = strcmp(ch1, ch2);
	printf("%d\n", ret);
	return 0;
}

運(yùn)行結(jié)果:

為什么這里結(jié)果為1呢而不是其他大于0的數(shù)?來看看下面的分析

1.4.函數(shù)使用結(jié)果分析

分析:

先來看看倆字符串第一個字符在內(nèi)存中的ASCⅡ值:

上面函數(shù)分析里面說了兩個字符的ASCⅡ值進(jìn)行比較之后,不相等的返回大于0的數(shù);因此這里返回的是1。在vs編譯器的庫函數(shù)中對于strcmp函數(shù)來說,比較兩個字符串ASCⅡ值大于 0 的就都返回 1;小于 0 的就都返回 -1。,當(dāng)然這里是同意規(guī)定了一下,我們還可以不規(guī)定,直接返回他們的差值,這樣返回的差值也是大于 0 的數(shù)和小于 0 的數(shù)。

2.庫函數(shù)strcmp源代碼

2.1.庫函數(shù)源代碼

int __cdecl strcmp (const char * src,const char * dst)
{
	int ret = 0 ;
	while((ret = *(unsigned char *)src - *(unsigned char *)dst) == 0 && *dst)
	{
 		++src, ++dst;
 	}
 	return ((-ret) < 0) - (ret < 0); 
 }

2.2.庫函數(shù)分析

分析:

1、這里面先用 unsigned char * 將其指針轉(zhuǎn)化為無符號型,在去取里面存的值,即得到字符的ASCⅡ值;

2、return ((-ret) < 0) - (ret < 0); 這一句就是讓差值大于 0 的返回 1;差值小于0的返回 -1。

3.模擬實(shí)現(xiàn) strcmp 函數(shù)

3.1.模擬實(shí)現(xiàn)

//模擬實(shí)現(xiàn)strcmp函數(shù)
int my_strcmp(const char* str1, const char* str2)
{
	assert(str1 && str2);
	while (*str1 ==  * str)
	{
		if ( *str1 == '\0')
		{
			return 0;
		}
		str1++;
		str2++;
	}
	return *str1 - *str2;
}
int main(void)
{
	//strcmp比較的是對應(yīng)位置上的字符大小
	char ch1[10] = { 0 };
	char ch2[10] = { 0 };
	scanf("%s", ch1);
	scanf("%s", ch2);
	printf("%d\n", my_strcmp(ch1, ch2));
}

3.2.模擬實(shí)現(xiàn)分析

分析:

1、因?yàn)檫@里是比較兩個字符串,所以字符串都不需要修改,因?yàn)槎伎梢杂胏onst 修飾;

2、這里模擬實(shí)現(xiàn)的時(shí)候返回值是兩個字符值的差值。

3、也可以寫為差值大于 0 返回 1 ;差值小于0返回 -1 形式。

以上代碼均可運(yùn)行,所用編譯環(huán)境為 vs2019 ,運(yùn)行時(shí)注意加上編譯頭文件#define _CRT_SECURE_NO_WARNINGS 1

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

相關(guān)文章

  • C語言實(shí)現(xiàn)括號配對的方法示例

    C語言實(shí)現(xiàn)括號配對的方法示例

    本文主要介紹了C語言實(shí)現(xiàn)括號配對的方法示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C++通用動態(tài)抽象工廠的實(shí)現(xiàn)詳解

    C++通用動態(tài)抽象工廠的實(shí)現(xiàn)詳解

    在面向?qū)ο蟮木幊讨?一般通過繼承和虛函數(shù)來提供抽象能力,下面這篇文章主要給大家介紹了關(guān)于C++通用動態(tài)抽象工廠的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • C++ 強(qiáng)制類型轉(zhuǎn)換詳解

    C++ 強(qiáng)制類型轉(zhuǎn)換詳解

    這篇文章主要介紹的是C++ 強(qiáng)制類型轉(zhuǎn)換詳解,C語言中的強(qiáng)制轉(zhuǎn)換主要用于普通數(shù)據(jù)類型、指針的強(qiáng)制轉(zhuǎn)換,沒有類型檢查,轉(zhuǎn)換不安全,下面我們來看看其具體語法及詳細(xì)內(nèi)容
    2021-11-11
  • 詳解C++17中if和switch語句的新特性

    詳解C++17中if和switch語句的新特性

    這篇文章主要為大家詳細(xì)介紹了C++17中if和switch語句的新特性的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • c++ 判斷是64位還是32位系統(tǒng)的實(shí)例

    c++ 判斷是64位還是32位系統(tǒng)的實(shí)例

    這篇文章主要介紹了c++ 判斷是64位還是32位系統(tǒng)的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • VSCode添加頭文件(C/C++)的實(shí)現(xiàn)示例

    VSCode添加頭文件(C/C++)的實(shí)現(xiàn)示例

    這篇文章主要介紹了VSCode添加頭文件(C/C++)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • C語言 如何求兩整數(shù)的最大公約數(shù)與最小公倍數(shù)

    C語言 如何求兩整數(shù)的最大公約數(shù)與最小公倍數(shù)

    這篇文章主要介紹了C語言中如何求兩整數(shù)的最大公約數(shù)與最小公倍數(shù),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • STL常用容器詳細(xì)解析

    STL常用容器詳細(xì)解析

    這里我們不涉及容器的基本操作之類,只是要討論一下各個容器其各自的特點(diǎn)STL中的常用容器包括:順序性容器(vector、deque、list)、關(guān)聯(lián)容器(map、set)、容器適配器(queue、stac)
    2013-09-09
  • C語言深入探究程序的編譯之預(yù)處理

    C語言深入探究程序的編譯之預(yù)處理

    在C語言的程序中包括各種以符號#開頭的編譯指令,這些指令稱為預(yù)處理命令。預(yù)處理命令屬于C語言編譯器,而不是C語言的組成部分,通過預(yù)處理命令可擴(kuò)展C語言程序設(shè)計(jì)的環(huán)境
    2022-05-05
  • 使用C語言實(shí)現(xiàn)內(nèi)存池的示例代碼

    使用C語言實(shí)現(xiàn)內(nèi)存池的示例代碼

    所謂內(nèi)存池,顧名思義和線程池的設(shè)計(jì)原理是一樣的,為了減少頻繁申請釋放內(nèi)存而帶來的資源消耗,減少釋放內(nèi)存后產(chǎn)生的內(nèi)存碎片,下面我們就來看看如何使用C語言實(shí)現(xiàn)內(nèi)存池吧
    2024-02-02

最新評論

镶黄旗| 曲沃县| 安陆市| 陇川县| 西畴县| 和龙市| 茶陵县| 乐安县| 平邑县| 成武县| 盱眙县| 珲春市| 榆中县| 黑水县| 平武县| 修武县| 中西区| 尼玛县| 乌兰察布市| 景德镇市| 随州市| 江油市| 九龙城区| 合水县| 聊城市| 小金县| 曲水县| 固原市| 泰安市| 武乡县| 高密市| 鹤山市| 朝阳县| 茂名市| 四川省| 斗六市| 谷城县| 洛扎县| 汶川县| 栾川县| 休宁县|