一、字符串的比较运算--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;
}
输入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);
输入 "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' 没有进行了比较 )
三、其他数据类型的比较运算--char,int,float,double数据
char, int, float, double数据的比较都使用:
大于: >
大于或等于: >=
小于: <
小于或等于: <=
不等于: !=
等于: == (注意:不是 = 一个等于号是赋值的意思)
比较运算的结果:(逻辑值)
结果为“真”: 1
结果为“假”: 0
比较运算的使用场合:用于“条件判断”