C语言字符串以及其他数据类型的比较运算

一、字符串的比较运算--strcmp函数

       字符串的比较运算,使用的是strcmp函数

       #include <string.h>             //注意要先声明string.h头文件
       int  strcmp ( const  char *str1 , const  char *str2 );

       比较规则:
       按顺先从前往后比较
       同序号的字符按“ASCII”码值比较
       直到遇到对应字符不等 或者 字符串结束 

       返回值:
       str1 < str2时, 返回值< 0(有些编译器返回 -1)
       str1 > str2时, 返回值> 0(有些编译器返回 1)

       str1 = str2时, 返回值== 0

#include <stdio.h>
#include <string.h>

int main()
{   
	char str1[16] = "suzhou";
	char str2[16];
	int ret;                    //返回值
	printf("请输入您的地址:");
	gets(str2);                 //因为scanf输入不识别空格,这里使用gets
	
    ret = strcmp(str1, str2);
		
    printf("返回值是:%d",ret);
	
    return 0;
}

       433e8901814234a31bc876b6d9e9d05d13d.jpg

       输入su zhou ,打印的结果是 1 ,说明 str1 > str2 。这是因为比到第三个字符时,是str1 的 'z' 跟 str2 的 '空格' 比较,明显  'z' > '空格'。

       strcmp函数也有缺点

       当输入的函数是 fgets 时,常常会把行末的"回车符"也存储到字符串中(gets没有这个问题,参考:前文链接),会造成对比时回车符也参与比较了。如:

    char srt1[16] = "suzhou";
	char srt2[16];
	int ret;                    //返回值
	printf("请输入您的地址:");
	
    fgets(srt2,sizeof(srt2),stdin); //可以无限输入,但只能读输入的15个字符,最后必须是结束符'\0'
	
    ret = strcmp(srt1, srt2);
		
    printf("返回值是:%d",ret);

       2b92e11184708a483716111e62cb0d1351e.jpg

       输入 "suzhou" 返回值是 -1 。按理应该跟 str1 的一样,返回值应该是 0 。

       这是因为 fgets 函数输入时,长度不满 fgets 函数中第二个参数定义的长度时,会把输入结束的回车符也读取了(参考:前文链接

       str2 的内容不是 "suzhou" 而是 "suzhou\n"

       为了避免上述的情况,我们引入strncmp函数进行字符串的比较。

 

二、字符串的比较运算--strncmp函数

       #include <string.h>
       int strncmp( const char *str1,  const char *str2,  size_t count );
       最多能比较字符串 str1 和 str2 的前count个字符
       通常用来比较 fgets 输入的字符串,或者在其他的场合只比较字符串前面的几个字符的时候用到!

       同样是上题,我们用 strncmp 进行比较:

#include <stdio.h>
#include <string.h>

int main()
{   
	char srt1[16] = "suzhou";
	char srt2[16];
	int ret;                    //返回值
	printf("请输入您的地址:");
	fgets(srt2,sizeof(srt2),stdin);       
	ret = strncmp(srt1, srt2,strlen(srt1));  //只比较 strlen(srt1) = 6 个字符
		
    printf("返回值是:%d",ret);
	
    return 0;
}

       这次的比较结果就相同了:(因为第7个字符 '\n' 没有进行了比较  )

       2bddac1456479a0c3611d521620e8d03373.jpg

 

三、其他数据类型的比较运算--char,int,float,double数据

       char, int, float, double数据的比较都使用:
       大于:               >
       大于或等于:       >=
       小于:              <
       小于或等于:    <=
       不等于:           !=      
       等于:              ==     (注意:不是 =  一个等于号是赋值的意思

       比较运算的结果:(逻辑值)
       结果为“真”:  1
       结果为“假”:  0

       比较运算的使用场合:用于“条件判断

转载于:https://my.oschina.net/u/3979769/blog/2209962

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值