库函数strcmp的实现
来源:互联网 发布:java游戏破解版网站 编辑:程序博客网 时间:2024/06/03 18:04
在c语言中,库函数strcmp是一个运用很频繁的函数,它的功能是比较两个字符串的大小,字符串怎么比较大小呢?
其实是比较相同位置上字符的ASC码值的大小。
举个例子:
"abc"和"acb"两个字符串,比较大小,很显然是后者大,我们来分析一下:
比较大小是以一个一个字符比较,a与a比较相同,再比较下一个,b与c比较很显然c的ASC码值要大,所以后者大。
那么有人要问比较这里后面就不用比较了吗??
答案是:“是的”。
来我们看一下具体代码:
int strcmp(const char *string1,const char *string2){int ret = 0;assert(string1);assert(string2);while(!(ret = *(unsigned char *)string1 - *(unsigned char *)string2) && *string2){string1++;string2++;}if(ret<0){ret = -1;}else if(ret>0){ret = 1;}return ret;}我们来分析一下代码;
首先为什么返回值是int?
因为strcmp比较是已大于等于小于0来判断两个字符串是否相等。
具体来说,比如string1>string2 那么返回结果是1,即大于0。
如果string1<string2 返回值为-1 ,结果小于0。
相等就返回0。
所以一般用都要跟上判断,例如:
int main(){char arr[] ="hello world";char arr1[] = "hello wordl";if(strcmp(arr,arr1)==0){printf("相等\n");}else{printf("不相等\n");}return 0;}
这只是一种用法,灵活运用还的多练习。
assert断言,是用来判断传过来的指针是是否为空,增强了代码的健壮性;
主要代码核心(!ret = *(unsigned char *)string1 - *(unsigned char *)string2)&&*string2,我们来分析一下,
用unsigned char* 强转因为我们相减的字符ASC码值为正数没有负数,也就是无符号数,
为什么取反,在判断中如果相等即ret为0,这样就会跳出循环体,所以取反后判断不为0,就会进行下一个字符比较,而&&string2是判断结束,这里string2也可以换成
string1,怎么判断呢?当两个字符串相同时,比较到最后一个字符\0 字符相减ret==0,取反成立,所以就要看string1或者strint2的字符,如果是\0表示0为假跳出循环。
- 库函数strcmp的实现
- 库函数strcpy,strcat,strcmp,shrlen的实现
- 库函数 strcat、strcmp实现
- 编程实现strcmp库函数
- C++常用库函数atoi,itoa,strcpy,strcmp的实现
- [转]C++常用库函数atoi,itoa,strcpy,strcmp的实现
- strcpy、strlen、strcmp的不使用库函数实现
- 字符串库函数strcpy strcmp strstr memcpy memmove等的实现
- C++常用库函数atoi,itoa,strcpy,strcmp的实现
- C++常用库函数atoi,itoa,strcpy,strcmp的实现
- C++常用库函数atoi,itoa,strcpy,strcmp的实现
- C++常用库函数atoi,itoa,strcpy,strcmp的实现
- C各类库函数的实现(atoi,strcpy,strcmp...)
- C++常用库函数atoi,itoa,strcpy,strcmp的实现
- C++常用库函数atoi,itoa,strcpy,strcmp的实现
- C++ 常用库函数atoi,itoa,strcpy,strcmp的实现
- 自己模拟strcmp库函数写的功能函数my_strcmp实现strcmp的功能,完整代码
- 【c语言】不用库函数实现strcmp
- linux shell 和 基本指令
- js 实现用window.print()打印页面中的部分内容,局部打印
- 素数
- 为selenium配置webdriver
- 数据结构 算法、线性表、顺序表
- 库函数strcmp的实现
- mybatis调用存储过程(oracle)
- poj2456Aggressive cows(二分搜索最小化最大值)
- 基本的JSP中调用Ajax与Servlet进行数据交互
- 通过MailServer和Foxmail搭建本地邮件服务器及实现本地邮箱账号收发邮件
- ubuntu下打开matlab
- Ubuntu下deb包的安装方法
- 母函数(生成函数)学习
- java笔记