文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

c语言如何进行字符串比较

2023-06-14 23:44

关注

这篇文章将为大家详细讲解有关c语言如何进行字符串比较,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

C语言是什么

C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发,使用C语言可以以简易的方式编译、处理低级存储器。

比较方法:1、bcmp(),比较字符串的前n个字节是否相等;2、strcmp(),区分大小写的比较字符串;3、stricmp(),不区分大小写的比较字符串;4、strncmp()或strnicmp(),区分大小写的比较字符串的前n个字符。

本教程操作环境: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) : 32strcmp(a, c) :-31strcmp(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=1s3-s4=-1s5-s6=1

GCC下运行结果:

s1-s2=32s3-s4=-120s5-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=0s3-s4=-1s5-s6=1

GCC下运行结果:

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

关于“c语言如何进行字符串比较”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯