strcmp()函数自实现
来源:互联网 发布:电脑自动开关机软件 编辑:程序博客网 时间:2024/06/05 15:48
今天继续来模拟实现库函数------strcmp()。
写my_str_cmp()函数之前,先了解一下它的定义:strcmp
要说的是,str1 > str2 时返回一个正数就好,具体这个数字是几,是无所谓的;str1 < str2 时返回一个负数就好,具体这个数字是几,也是无所谓的。在vs的环境里面,这个值分别是1 和 -1.C/C++函数,比较两个字符串设这两个字符串为str1,str2,若str1==str2,则返回零;若str1>str2,则返回正数;若str1<str2,则返回负数。所以,像下面这样的语句,是有问题的:
int ret = strcmp(str1, str2);if (ret == 1)printf("arr1 > arr2\n");else if (ret == -1)printf("arr1 < arr2\n");elseprintf("arr1 == arr2\n");现在就来建立整体的框架:
#include <stdio.h>int main(){char arr1[] = "hello world !";char arr2[] = "hello c !";int ret = my_strcmp(arr1, arr2);if (ret > 0)//输出显示printf("arr1 > arr2\n");else if (ret < 0)printf("arr1 < arr2\n");elseprintf("arr1 == arr2\n");system("pause");return 0;}然后开始写my_strcmp()函数:
int my_strcmp(const char * left,const char * right)//*left和*right的值不需要修改,加上const修饰{assert(left);//断言传进来的两个指针非空assert(right);while (*left == *right) {//比较当前字符,相同则进while循环if (*left == '\0')//当前字符相等的基础上,又发现为'\0',return 0;//所以两串相等++left;++right;}return *left - *right;//来到这里,当前字符必定不等,直接返回差}
写到这里,my_strcmp()函数就实现完了,测试一下,发现跟预想的结果一样。再来与真正的库函数比较一下:
int __cdecl strcmp ( const char * src, const char * dst ){ int ret = 0 ; while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst) ++src, ++dst; if ( ret < 0 ) ret = -1 ; else if ( ret > 0 ) ret = 1 ; return( ret );}其实只有一些小的差别了,读者自己发现吧!
1 0
- strcmp()函数自实现
- strcmp函数实现
- strcmp函数的实现
- 实现strcmp()函数
- strcmp函数的实现
- strcmp函数的实现
- strcmp函数的实现
- 实现strcmp 函数
- C++ - 实现strcmp函数
- 实现strcmp函数
- strcmp函数的实现
- strcmp函数的实现
- strcmp函数的实现
- strcmp函数实现
- strcmp函数实现
- strcmp函数的实现
- strcmp函数实现
- strcmp函数的实现
- SQL查询相关技术-5.SQL操作
- hdu-3068 Manacher算法模板
- C++ 学习笔记十四 - C++ char命令传送中文练习
- iOS动画Animation-4-1:CALayer
- 【程序人生】:一次熬夜的经历
- strcmp()函数自实现
- [4] Word 手把手教你写毕业论文-1
- [5] Word 手把手教你写毕业论文-2
- [6] Word Q&A
- LeetCode 273. Integer to English Words
- NoSQL数据库介绍(6)
- 动态规划之01背包问题(最易理解的讲解)
- 访问修饰符和多态
- POJ2502 Subway(最短路径)