c语言怎么进行字符串比较

比较方法: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 为要比较的长度。

立即学习“C语言免费学习笔记(深入)”;

【返回值】如果 s1, s2 的前 n 个字节相等或者 n 等于 0,则返回 0,否则返回非 0 值。

bcmp() 函数不检查NULL。

实际上,bcmp() 和 memcmp() 功能相同,用来比较内存块的前 n 个字节是否相等,但是 s1, s2 两个参数为指针,又很奇怪的位于 string.h 文件中,也可以用来比较字符串。

示例:

#include #include 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 main(){    char *a = "aBcDeF";    char *b = "AbCdEf";    char *c = "aacdef";    char *d = "aBcDeF";    printf("strcmp(a, b) : %dn", strcmp(a, b));    printf("strcmp(a, c) : %dn", strcmp(a, c));    printf("strcmp(a, d) : %dn", 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#includeint 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,则将差值返回。例如字符串”Ac”和”ba”比较则会返回字符”A”(65)和’b'(98)的差值(-33)。

注意:要比较的字符包括字符串结束标志’’,而且一旦遇到’’就结束比较,无论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#includeint 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=%dn", strncmp(s1, s2, 20));  // 是否区分大小写    printf("s3-s4=%dn", strncmp(s3, s4, 100));  // s3的长度小于s4    printf("s5-s6=%dn", 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#includeint 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=%dn", strnicmp(s1, s2, 20));  // 是否区分大小写    printf("s3-s4=%dn", strnicmp(s3, s4, 100));  // s3的长度小于s4    printf("s5-s6=%dn", 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语言视频教程》

以上就是c语言怎么进行字符串比较的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1434951.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 10:14:42
下一篇 2025年12月17日 10:14:56

相关推荐

  • c语言输入成绩怎么判断等级

    判断方法:1、用“switch(成绩/10){case 9:A;..case 6:D;default:E;}”语句;2、用“if(成绩>=90)A;else if(成绩>=80)B;..else if(成绩>=60)D;elseE;”语句。 本教程操作环境:windows7系统、c…

    好文分享 2025年12月17日
    000
  • c语言函数的三种调用方式是什么

    函数的三种调用方式:1、函数作为表达式中的一项出现在表达式中,例“z=max(x,y)”;2、函数作为一个单独的语句,例“printf(“%d”,a)”;3、函数作为调用另一个函数时的实参,例“printf(“%d”,max(x,y))”。 本教程操作…

    2025年12月17日
    000
  • c语言怎么求字符串的长度并输出

    c语言求字符串的长度并输出的方法:首先使用strlen()函数计算出字符串的长度,并赋值给变量len,语法“len=strlen(字符串);”;然后使用printf()函数输出长度即可,语法“printf(“%dn”,len);”。 本教程操作环境:windows7系统、c9…

    2025年12月17日
    000
  • c语言中保留两位小数怎么表示

    在C语言中,表示方法为“%.2lf”,语法格式为“printf(“%.2lf,%.2lfn”,元素)”。“%.2lf”在“printf()”语句里,整数部分全部输出,小数部分输出2位,不足两位的后面补0,大于两位的截短到两位。 本教程操作环境:windows7系统、C++17…

    2025年12月17日 好文分享
    000
  • C语言中文件包含的命令关键字是什么

    文件包含命令的关键字是“include”。文件包含命令“#include”是C语言程序常用的一条预处理命令,用于引入对应的头文件(“.h”文件),其格式为“#include “Header.h””。 本教程操作环境:windows7系统、c99版本、Dell G3电脑。 #i…

    2025年12月17日
    000
  • c语言运算符的优先级顺序是什么

    顺序是:1、“()”、.等;2、!、~、-、*、&等;3、*、/、%;4、加减运算;5、“”;6、等;7、“==”、“!=”;8、&;9、^;10、|;11、“&&”;12、“||”;13、“?:”;14、赋值运算等。 本教程操作环境:windows7系统、C++17…

    2025年12月17日
    000
  • c语言中用户标识符是指什么

    在c语言中,用户标识符是指用户根据需要自己定义的用来标识某个实体的一个符号;一般用来给变量、函数、数组等命名,以建立起名称与使用之间的关系。标识符由字母、下划线、数字组成,并且第一个字符必须是字母或下划线,不能是数字。 本教程操作环境:windows7系统、c99版本、Dell G3电脑。 标识符(…

    2025年12月17日
    000
  • c语言与go语言的区别是什么

    区别:1、C语言源文件的扩展名是“.h”和“.c”,Go语言源文件的扩展名是“.go”。2、C语言中通过文件来管理代码,Go语言中通过包来管理代码。3、C语言中一共有32个关键字,Go语言中一共有25个关键字。 本教程操作环境:windows7系统、c99&&GO 1.18版本、De…

    2025年12月17日 好文分享
    000
  • c语言二分法如何实现查找数组元素

    c语言二分法实现查找数组元素的方法:1、递归算法,代码为【if(a[mid] == key) return mid】;2、非递归算法,代码为【while( left 本教程操作环境:windows7系统、c99版本,DELL G3电脑。 c语言二分法实现查找数组元素的方法: 递归算法 #includ…

    2025年12月17日
    000
  • c语言如何查找字符串指定字符

    c语言查找字符串指定字符的方法:1、【strchr()】用来查找某字符在字符串中首次出现的位置;2、【strrchr()】函数用于查找某字符在字符串中最后一次出现的位置。 本教程操作环境:windows7系统、c99版本,DELL G3电脑。 c语言查找字符串指定字符的方法: 1、strchr() …

    2025年12月17日
    000
  • c语言源程序文件名的后缀是什么

    c语言源程序文件名的后缀是“.c”。c语言源程序经过C编译程序编译生成后缀为“.obj”的二进制文件(目标文件),然后由称为“连接程序”(Link)的软件把目标文件与C语言提供的各种库函数连接起来,生成后缀为“.exe”的可执行文件。 本教程操作环境:windows7系统、c99版本、Dell G3…

    2025年12月17日
    000
  • C语言中scanf和printf的区别是什么

    区别:scanf是输入函数,用于从标准输入设备(一般是键盘)输入数据;而printf是输出函数,用于向标准输出设备(一般是显示器)输出数据。 本教程操作环境:windows7系统、c99版本、Dell G3电脑。 scanf() 与 printf()是C标准库常用到的函数。而且两个函数都可以接受一定…

    2025年12月17日 好文分享
    000
  • 一个c源程序必须包含一个main函数吗

    是的,必须包含一个main函数。main函数是程序默认的入口,程序的执行是从main函数开始;如果没有main函数,则编译器不知道程序从哪里开始执行,所以一个c源程序有且仅有一个主函数(main函数)。 本教程操作环境:windows7系统、c99版本、Dell G3电脑。 main函数,又称主函数…

    2025年12月17日
    000
  • visual studio怎么创建c语言

    visual studio创建c语言程序的方法:首先打开VS主程序,选择创建新项目;然后在菜单栏中选择C++;接着进入VS主界面,在右边的解决方案管理器中找到源文件,右键添加,并选择新建项;最后选择添加C++文件即可。 本文操作环境:Windows7系统,visual studio2019版,DEL…

    2025年12月17日 好文分享
    000
  • c语言怎么输入3个数输出最大值

    方法:首先使用scanf()接收从键盘输入的三个数;然后使用“if else”语句比较三个数的大小,获得最大值;最后使用print()函数将最大值输出即可。 本教程操作环境:windows7系统、c99版本、Dell G3电脑。 c语言输入3个数输出最大值 #include int main() {…

    2025年12月17日
    000
  • c语言如何实现1~n累加求和

    1、for循环,语法“for(i=1;i 本教程操作环境:windows7系统、c99版本、Dell G3电脑。 问题描述:用C语言实现1+2+3+4+5+…+n的累加。 方法一:使用for循环。具体代码如下: #includeint add(int n){int i,sum=0;for(i=1;i…

    2025年12月17日 好文分享
    000
  • 在c语言中引用数组元素时,其数组下标的数据类型允许是什么

    在c语言中引用数组元素时,其数组下标的数据类型允许是:整型常量或整型表达式。C语言规定只能逐个引用数组元素而不能一次引用整个数组,数据元素的表示形式为“数组名[下标]”,下标可以是整型常量或整型表达式。 本教程操作环境:windows7系统、c99版本、Dell G3电脑。 在c语言中引用数组元素时…

    2025年12月17日
    000
  • 在不同函数中可以使用相同名字的变量吗

    可以使用。C语言在函数中说明的变量为局部变量,只在函数内起作用,不会影响到其他函数。在不同函数中使用相同的变量名不代表是同一变量。 本教程操作环境:windows7系统、c99版本、Dell G3电脑。 在不同函数中可以使用相同名字的变量。 教程推荐:《c语言教程视频》 在函数内部定义的变量(局部变…

    2025年12月17日
    000
  • 在c语言中char型数据在内存中的储存形式为什么

    在c语言中char型数据在内存中的储存形式为“ASCII码”。在C语言中,将一个字符常量放到一个字符变量中,实际并不是把该字符本身放到内存单元中,而是将与该字符相对应的ASCII码放到存储单元中。 本教程操作环境:windows7系统、c99版本、Dell G3电脑。 在c语言中char型数据在内存…

    2025年12月17日
    000
  • c语言中用于实现循环结构的三种基本语句是什么

    三种循环基本语句:1、while循环语句,语法“while(表达式){语句块}”;2、do-while循环语句,语法“do{语句块}while(表达式);”;3、for循环语句,语法“for(初始化语句;循环条件;自增或自减){语句块}”。 本教程操作环境:windows7系统、c99版本、Dell…

    2025年12月17日
    000

发表回复

登录后才能评论
关注微信