m_strcmp
strcmp比较两个字符串的大小,strcmp(str1, str2);
从str1和str2的第一个元素比较直到出现不同,或者遇到'\0'结束。如果str1 > str2 返回正数,str1 < str2返回负数,相等返回零。
eg:
str1 | str2 | |
---|---|---|
abcde | > | abcd |
abcde | > | abcddd |
abcde | < | abcdef |
自己实现这个函数:
#include <stdio.h>
#include <string.h>
int m_strcmp(char *str1, char *str2)
{
int i = 0;
while(str1[i] != '\0')
{
printf("str1 str2%s %s\n", str1, str2);
if(str2[i] != '\0')
{
if(str1[i] < str2[i])
{
return -1;
}else if(str1[i] > str2[i])
{
return 1;
}else if(str1[i] = str2[i])
{
i++;
continue;
}else
{
printf("this is a problem!\n");
}
}else if(str2[i] == '\0')
{
return 1;//str1>str2
}else
{
printf("this is a problem2!\n");
}
}
if(str2[i] == '\0')
{
return 0;
}else
{
return -1;//str1<str2
}
}
int main ()
{
char str1[15];
char str2[15];
int ret;
scanf("%s", str1);
scanf("%s", str2);
printf("%s %s\n", str1, str2);
ret = m_strcmp(str1, str2);
if(ret < 0)
{
printf("str1 小于 str2\n");
}
else if(ret > 0)
{
printf("str2 小于 str1\n");
}
else
{
printf("str1 等于 str2\n");
}
printf("%d\n", ret);
return(0);
}
大佬的优质代码:
int __cdecl strcmp (
const char * src,
const char * dst
)
{
int ret = 0 ;
while((ret = *(unsigned char *)src - *(unsigned char *)dst) == 0 && *dst)
++src, ++dst;
if ( ret < 0 )
ret = -1 ;
else if ( ret > 0 )
ret = 1 ;
return( ret );
}
m_strcmp的更多相关文章
- ICON文件保存
这两天想做一下windows系统下图标的修改,让程序有更新的时候能够更新图标的外观,达到提醒的作用,360,QQ经常采用这种方式进行更新的提示,也有采用弹框的方式来提示,用新版QVOD的同事可能见到过 ...
- C语言实现strcat / strlen / strcmp / strcpy
主要考虑两点: 返回值对使用的便利性. 边界,null的判断. strcat char *m_strcat(char *des, const char *src) { assert((des != N ...
随机推荐
- CF1228D Complete Tripartite
思路: 任选一点a,和a没有边直接相连的点一定和a在同一个集合,由此构造得到一个集合A.用类似的方法再构造一个集合B,并将剩下的点放在集合C中,就得到了三个集合A,B,C.再检查A,B,C是否符合要求 ...
- 【计算机视觉】SeetaFace Engine开源C++人脸识别引擎
SeetaFace Engine是一个开源的C++人脸识别引擎,它可以在不依赖第三方的条件下载CPU上运行.他包含三个关键部分,即:SeetaFace Detection,SeetaFace Alig ...
- Android StickyListHeadersListView头部悬停 分组列表实现
最近在做分组列表,头部悬停的效果,在github上就搜到了StickyListHeaders(https://github.com/emilsjolander/StickyListHeaders)这个 ...
- js获取下拉框的值
获取select 选中的option的值: $("#ddlRegType").find("option:selected").val(); 获取select ...
- 022 Android .9图片的含义及制作教程
1.图片(.9.png格式)的概念 (1)9patch图片是andriod app开发里一种特殊的图片形式,文件的扩展名为:.9.png (2)9patch图片的作用就是在图片拉伸的时候保证其不会失真 ...
- DateTimeFormatter 的操作与使用 -- 通俗易懂
在上一章我们讲解了LocalDate.LocalTime.LocalDateTime.Instant的操作与使用,下面讲解它们之间是如何进行格式化 DateTimeFormatter这个类它只提供了时 ...
- Linux的常用命令及快捷键
常用快捷键 1 终端中的快捷键 ctrl+a 回到行首,ctrl+e回到行尾 ctrl+n 代码候选 常用命令
- PAT甲级题分类汇编——图
本文为PAT甲级分类汇编系列文章. 图,就是层序遍历和Dijkstra这一套,#include<queue> 是必须的. 题号 标题 分数 大意 时间 1072 Gas Station 3 ...
- 【HC89S003F4开发板】 3串口调试
HC89S003F4开发板串口调试 使用资料自带的demo 主程序 /************************************系统初始化************************ ...
- IAT Hook 原理分析与代码编写
Ring 3层的 IAT HOOK 和 EAT HOOK 其原理是通过替换IAT表中函数的原始地址从而实现Hook的,与普通的 InlineHook 不太一样 IAT Hook 需要充分理解PE文件的 ...