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

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

 更新時間: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 兩個字符串進行比較,即為字符串比較函數(shù)。

1.2.函數(shù)分析

分析:

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

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

3、標準規(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;
}

運行結(jié)果:

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

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

分析:

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

上面函數(shù)分析里面說了兩個字符的ASCⅡ值進行比較之后,不相等的返回大于0的數(shù);因此這里返回的是1。在vs編譯器的庫函數(shù)中對于strcmp函數(shù)來說,比較兩個字符串ASCⅡ值大于 0 的就都返回 1;小于 0 的就都返回 -1。,當然這里是同意規(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.模擬實現(xiàn) strcmp 函數(shù)

3.1.模擬實現(xiàn)

//模擬實現(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.模擬實現(xiàn)分析

分析:

1、因為這里是比較兩個字符串,所以字符串都不需要修改,因為都可以用const 修飾;

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

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

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

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

相關(guān)文章

  • QT實戰(zhàn)之打開最近圖片功能的實現(xiàn)

    QT實戰(zhàn)之打開最近圖片功能的實現(xiàn)

    這篇文章主要為大家詳細介紹了如何利用Qt和QSettings實現(xiàn)打開最近圖片功能,文中的示例代碼講解詳細,對我們學習QT有一定的幫助,感興趣的可以了解一下
    2022-06-06
  • C語言判定一棵二叉樹是否為二叉搜索樹的方法分析

    C語言判定一棵二叉樹是否為二叉搜索樹的方法分析

    這篇文章主要介紹了C語言判定一棵二叉樹是否為二叉搜索樹的方法,結(jié)合實例形式綜合對比分析了C語言針對二叉搜索樹判定的原理、算法、效率及相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2018-08-08
  • C++編程歸并排序算法實現(xiàn)示例

    C++編程歸并排序算法實現(xiàn)示例

    這篇文章主要為大家介紹了C++編程歸并排序算法實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2021-11-11
  • MFC控件之CListCtrl的應(yīng)用實例教程

    MFC控件之CListCtrl的應(yīng)用實例教程

    這篇文章主要介紹了MFC控件中CListCtrl的應(yīng)用方法,包括了針對表格的一些操作,是MFC中比較重要的一個控件類,需要的朋友可以參考下
    2014-08-08
  • C語言實現(xiàn)消消樂游戲的代碼分享

    C語言實現(xiàn)消消樂游戲的代碼分享

    本章我們將編寫十字消除游戲,用戶點擊空白方塊,沿其上下左右方向?qū)ふ业谝粋€彩色方塊,如果有兩個或兩個以上顏色一致,就將其消除,感興趣的可以了解一下
    2023-02-02
  • c++ 內(nèi)聯(lián)函數(shù)和普通函數(shù)的區(qū)別

    c++ 內(nèi)聯(lián)函數(shù)和普通函數(shù)的區(qū)別

    內(nèi)聯(lián)函數(shù)是c++為了提高程序的運行速度做的改進,那么內(nèi)聯(lián)函數(shù)和普通函數(shù)的區(qū)別是什么,本文就來詳細的介紹一下,感興趣的朋友可以了解一下
    2021-05-05
  • 深入理解C++的多態(tài)性

    深入理解C++的多態(tài)性

    本篇文章是對C++的多態(tài)性進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 用位圖排序無重復(fù)數(shù)據(jù)集實例代碼(C++版)

    用位圖排序無重復(fù)數(shù)據(jù)集實例代碼(C++版)

    本文講解如何用位圖排序無重復(fù)的數(shù)據(jù)集,我們使用C++實現(xiàn)一下這個方法
    2013-11-11
  • C語言中文件處理全攻略詳解

    C語言中文件處理全攻略詳解

    這篇文章主要為大家詳細介紹了C語言中文件處理的相關(guān)知識,包括創(chuàng)建、寫入、追加操作解析,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2024-01-01
  • C語言字符串替換空格實例詳解

    C語言字符串替換空格實例詳解

    這篇文章主要為大家詳細介紹了C語言字符串替換空格實例,使用數(shù)據(jù)庫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02

最新評論