c实现版本比较

#include <assert.h>
#include <stdlib.h>

//以"."来区分每一段 ,
//由于每一段中可能有数字也可能有字母,
//故认为每一段是36进制数,之后比较36进制数的大小来判断每一部分的版本高低
// =0 版本1=版本2 
// <0 版本1<版本2 
// >0 版本1>版本2
int VesionCompare(const char* version1,const char* version2) {
const char* v1 = version1;
const char* v2 = version2;

long l1;
long l2;
while (*v1!='\0'&&*v2!='\0')
{
char* p1 = NULL;
char* p2 = NULL;
//利用strtol函数遇到'.'和'\0'转换结束的特性
l1 = strtol(v1, &p1, 36);
l2 = strtol(v2, &p2, 36);


//如果相等,比较下一部分
if (l1 == l2) {
if (*p1 != '\0')
{
v1 = p1+1;
}
else {
v1 = p1;
}


if (*p2 != '\0')
{
v2 = p2 + 1;
}
else {
v2 = p2;
}
}
else if (l1 < l2) {
return -1;
}
else {
return 1;
}
}


//最终比较结果可能某一部分会提前结束,故需要比较结束情况
if (*v1 == '\0'&&*v2 == '\0') {
return 0;
}
else if (*v1 == '\0'&&*v2 != '\0') {
return -1;
}
else {
return 1;
}
}




int main()
{
assert(VesionCompare("1.2.3a", "1.2.3b") < 0);


assert(VesionCompare("1.1.1", "1.1.1") == 0);


assert(VesionCompare("1.1.1", "1.1.2") < 0);
assert(VesionCompare("1.1.2", "1.1.1") > 0);
assert(VesionCompare("1.1.1.2", "1.1.1") > 0);
assert(VesionCompare("1.1.1.2b", "1.1.1.2a") > 0);
assert(VesionCompare("1.1.12.2b", "1.1.1.2a") > 0);
assert(VesionCompare("1.1.b.2b", "1.1.1.2a") > 0);
assert(VesionCompare("1.1.1.2b", "1.1.1.2a") > 0);
assert(VesionCompare("1.2.3.4.6", "1.2.3.5b") < 0);


return 0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值