首頁  >  文章  >  後端開發  >  c語言怎麼進行字串比較

c語言怎麼進行字串比較

青灯夜游
青灯夜游原創
2021-05-08 15:05:4539785瀏覽

比較方法:1、bcmp(),比較字串的前n個位元組是否相等;2、strcmp(),區分大小寫的比較字串;3、stricmp(),不區分大小寫的比較字串;4、strncmp()或strnicmp(),區分大小寫的比較字串的前n個字元。

c語言怎麼進行字串比較

本教學操作環境:windows7系統、c99版本、Dell G3電腦。

使用bcmp()--比較記憶體(字串)的前n個位元組是否相等

原型為:

int bcmp(const void *s1, const void * s2, int n);

【參數】s1, s2 為需要比較的兩塊記憶體(或兩個字串),n 為要比較的長度。

【傳回值】如果 s1, s2 的前 n 個位元組相等或 n 等於 0,則傳回 0,否則傳回非 0 值。

bcmp() 函數不檢查NULL。

實際上,bcmp() 和memcmp() 功能相同,用來比較記憶體區塊的前n 個位元組是否相等,但是s1, s2 兩個參數為指針,又很奇怪的位於string. h 檔案中,也可以用來比較字串。

範例:

#include <stdio.h>
#include <string.h>
int main ()
{
    char *s1 = "Golden Global View";
    char *s2 = "Golden Global View";
    if( !bcmp(s1, s2, 7) )
        printf("s1 equal to s2 in first 7 bytes");
    else
        printf("s1 not equal to s2 in first 7 bytes");
    return 0;
}

使用strcmp()--比較字串(區分大小寫) 

其原型為:

int strcmp(const char *s1, const char *s2);

【參數】s1, s2 為兩個需要比較的字串。

字串大小的比較是以ASCII 碼表上的順序來決定,此順序也是字元的值。 strcmp()先將s1 第一個字符值減去s2 第一個字符值,若差值為0 則再繼續比較下個字符,若差值不為0 則將差值返回。例如字串"Ac"和"ba"比較則會傳回字元"A"(65)和'b'(98)的差異(-33)。

【回傳值】若參數s1 和s2 字串相同則回傳0。 s1 若大於s2 則傳回大於0 的值。 s1 若小於s2 則傳回小於0 的值。

注意:strcmp() 以二進位的方式進行比較,不會考慮多位元組或寬位元組字元。

範例:

#include <string.h>
main(){
    char *a = "aBcDeF";
    char *b = "AbCdEf";
    char *c = "aacdef";
    char *d = "aBcDeF";
    printf("strcmp(a, b) : %d\n", strcmp(a, b));
    printf("strcmp(a, c) : %d\n", strcmp(a, c));
    printf("strcmp(a, d) : %d\n", strcmp(a, d));
}

輸出:

strcmp(a, b) : 32
strcmp(a, c) :-31
strcmp(a, d) : 0

#使用stricmp()--比較字串(不區分大小寫)    

#原型為:

int strcmp(char *s1, char *s2);

【參數說明】s1, s2 為兩個需要比較的字串。

字串大小的比較是以ASCII 碼表上的順序來決定,此順序也是字元的值。 stricmp()先將s1 第一個字符值減去s2 第一個字符值,若差值為0 則再繼續比較下個字符,若差值不為0 則將差值返回。例如字串"Ac"和"ba"比較則會傳回字元"A"(65)和'b'(98)的差異(-33)。

【回傳值】若參數s1 和s2 字串相同則回傳0。 s1 若大於s2 則傳回大於0 的值。 s1 若小於s2 則傳回小於0 的值。

注意:stricmp()是Windows下特有的,linux下具有相同功能的函數是strcasecmp(),包含在頭檔strings.h下。

另外一個不區分大小寫比較字串的函數是strcmpi(),strcmpi()是stricmp()的巨集定義,實際上未提供此函數。

範例:比較兩個字串的大小。

#include<stdio.h>
#include<string.h>
int main(void)
{
    /*定义两个字符串*/
    char* s1 = "http://see.xidian.edu.cn/cpp/u/biaozhunku/";
    char* s2 = "http://see.xidian.edu.cn/cpp/shujujiegou/";
    /*比较字符串(不分大小写)*/
    int result = stricmp(s1,s2);  // 也可以改成strcmpi()
    if(result>0)
    {
        printf("Result: s1 > s2");
    }
    else if(result<0)
    {
        printf("Result: s1 < s2");
    }
    else if(result == 0)
    {
        printf("Result: s1 = s2");
    }   
    getchar();/*等待用户输入个字符,然后退出*/
    return 0;
}

輸出:

Result: s1 > s2

使用strncmp()--比較字串的前n個字元(區分大小寫)    

#其原型為:

int strncmp ( const char * str1, const char * str2, size_t n );

【參數】str1, str2 為需要比較的兩個字串,n為要比較的字元的數目。

字串大小的比較是以ASCII 碼表上的順序來決定,此順序也是字元的值。 strncmp()先將s1 第一個字符值減去s2 第一個字符值,若差值為0 則再繼續比較下個字符,直到字符結束標誌'\0',若差值不為0,則將差值傳回。例如字串"Ac"和"ba"比較則會傳回字元"A"(65)和'b'(98)的差異(-33)。

注意:要比較的字元包括字串結束標誌'\0',而且一旦遇到'\0'就結束比較,無論n是多少,不再繼續比較後邊的字元。

【傳回值】若str1與str2的前n個字元相同,則傳回0;若s1大於s2,則傳回大於0的值;若s1 若小於s2,則傳回小於0的值。

注意:如果兩個字元不同,GCC傳回該字元對應的ASCII碼的差值,VC回傳-1或1。但讓人為難的是,strnicmp()、strcmp()、stricmp()在GCC和VC下都回傳-1或1,而不是ASCII的差值。

實例:對2組字串進行比較。

#include<stdio.h>
#include<string.h>
int main(void){
    char* s1 = "http://see.xidian.edu.cn/cpp/u/xitong/";
    char* s2 = "HTTP://see.xidian.edu.cn/cpp/u/xitong/";
    char* s3 = "abc";
    char* s4 = "abcxyz";
    char* s5 = "123456";
    char* s6 = "123";
    printf("s1-s2=%d\n", strncmp(s1, s2, 20));  // 是否区分大小写
    printf("s3-s4=%d\n", strncmp(s3, s4, 100));  // s3的长度小于s4
    printf("s5-s6=%d\n", strncmp(s5, s6, 100));  // s5的长度大于s6
    return 0;
}

VC6.0下運行結果:

s1-s2=1
s3-s4=-1
s5-s6=1

GCC下運行結果:

s1-s2=32
s3-s4=-120
s5-s6=52

使用strnicmp()--比較字串的前n個字符(區分大小寫)    

原型為:

int strnicmp ( const char * str1, const char * str2, size_t n );

【參數】str1, str2 為兩個需要比較的字串,n為要比較的字元的數目。

【傳回值】若str1與str2的前n個字元相同,則傳回0;若s1大於s2,則傳回大於0的值;若s1 若小於s2,則傳回小於0的值。

與strncmp()不同的是,如果兩個字元不同,GCC和VC都會回傳-1或1,而不是傳回對應的ASCII的差值。

有關strnicmp()的其他說明請查看strncmp(),這裡僅舉例演示,不再贅述。

另外一个不区分大小写比较字符串前n个字符的函数是strncmpi(),strncmpi()是strnicmp()的宏定义,实际未提供此函数。

示例:对6组字符串进行比较。

#include<stdio.h>
#include<string.h>
int main(void){
    char* s1 = "http://see.xidian.edu.cn/cpp/u/xitong/";
    char* s2 = "HTTP://see.xidian.edu.cn/cpp/u/xitong/";
    char* s3 = "abc";
    char* s4 = "abcxyz";
    char* s5 = "123456";
    char* s6 = "123";
    printf("s1-s2=%d\n", strnicmp(s1, s2, 20));  // 是否区分大小写
    printf("s3-s4=%d\n", strnicmp(s3, s4, 100));  // s3的长度小于s4
    printf("s5-s6=%d\n", strnicmp(s5, s6, 100));  // s5的长度大于s6
    return 0;
}

VC6.0下运行结果:

s1-s2=0
s3-s4=-1
s5-s6=1

GCC下运行结果:

s1-s2=0
s3-s4=-1
s5-s6=1

相关推荐:《C语言视频教程

以上是c語言怎麼進行字串比較的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn