免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: wangrujun
打印 上一主题 下一主题

[算法] 请教一个版本号比较的算法 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-10-11 17:28 |只看该作者
简单实现:

  1. int cmp_version(const char* v1, const char* v2)
  2. {
  3.         int a[3]={0};
  4.         int x[3]={0};

  5.         sscanf(v1, "%d.%d.%d", &a[0], &a[1], &a[2]);
  6.         sscanf(v2, "%d.%d.%d", &x[0], &x[1], &x[2]);
  7.         
  8.         int i = 0, n = 0;
  9.         for (i = 0; i < 3; i++) {
  10.                 if ((n = (a[i] - x[i])) != 0)
  11.                         return n;
  12.         }
  13.         return 0;
  14. }

复制代码

论坛徽章:
0
12 [报告]
发表于 2006-10-11 18:47 |只看该作者
建议用移位的办法产生一个相对比较大的整数。比如,假设版本号的每个部分都不超过 256,并且版本数字共分 4 个部分,例如:

1.3.7.144

那么,可以这样做:

#define VERSION_INFO(w,x,y,z) ((w<<24) | (x<<16) | (y<<8) | (z))

得到的结果即为 1<<24 | 3<<16 | 7<<8 | 144

论坛徽章:
0
13 [报告]
发表于 2012-05-16 15:23 |只看该作者
其实可以这样,用awk
ab="5.2.6"
ac='7.3.5'

awk 'BEGIN{split ('\"$ab\.$ac\"',aa,".");for(i=1;i<=3;i++)if('"aa[i]"' > '"aa[3+i]"')exit 1;'

论坛徽章:
0
14 [报告]
发表于 2012-05-16 17:19 |只看该作者
回复 4# yuangong


    1.10
    1.2

strcmp可以比较么?

论坛徽章:
0
15 [报告]
发表于 2012-05-16 17:21 |只看该作者
直接strtok,然后atoi就行了。

论坛徽章:
0
16 [报告]
发表于 2012-05-16 18:00 |只看该作者
1.
ls -l -S -v

2.
echo -e "1.21.5\n1.123.4" | sort -Vr
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP