如何循环对比字符串数据c语言,C语言字符串以及其他数据类型的比较运算

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

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

#include              //注意要先声明string.h头文件

int  strcmp ( const  char *str1 , const  char *str2 );

比较规则:

按顺先从前往后比较

同序号的字符按“ASCII”码值比较

直到遇到对应字符不等 或者 字符串结束

返回值:

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

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

str1 = str2时, 返回值== 0

#include

#include

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;

}

30cf9d875b901f4d31c94c30b6572f88.png

输入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);

f0fc6e39c0f36f87d7cc505a3fa4d9d5.png

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

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

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

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

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

#include

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

最多能比较字符串 str1 和 str2 的前count个字符。

通常用来比较 fgets 输入的字符串,或者在其他的场合只比较字符串前面的几个字符的时候用到!

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

#include

#include

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' 没有进行了比较  )

218499ad2098693ff363ddd30f76f23f.png

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

char, int, float, double数据的比较都使用:

大于:               >

大于或等于:       >=

小于:              <

小于或等于:    <=

不等于:           !=

等于:              ==     (注意:不是 =  一个等于号是赋值的意思)

比较运算的结果:(逻辑值)

结果为“真”:  1

结果为“假”:  0

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值