• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > 求字符串版本号比较算法!

求字符串版本号比较算法!

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了字符串相似度算法,字符串匹配算法,字符串模式匹配算法,字符串加密解密算法,字符串排序算法等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:求字符串版本号比较算法!
描述:

远程版本号: "1.1.1"
本地版本号: "2.0"

字符串保存,大家是怎么比较的呢?


解决方案1:

>>> num = '@"1.1.1"'
>>> num1 = '@"1.1.1"'
>>> def run(s):
    return s.strip('@"').split('.')
>>> run(num1)
['1', '1', '1']
>>> run(num2)
['2', '0']

解决方案2:

JavaScript 实现. 原理就是按 . 分开, 然后按位比较呗.

/*
  字符串比较
  返回值:
    0: 相等
    1: 大于
   -1: 小于
*/
function versionCompare( stra, strb ) {
  var straArr = stra.split('.');
  var strbArr = strb.split('.');
  var maxLen = Math.max( straArr.length, strbArr.length );
  var result, sa, sb;
  for ( var i = 0; i < maxLen; i++ ) {
    sa = ~~straArr[i];
    sb = ~~strbArr[i];
    if(sa > sb){
      result = 1;
    }
    else if(sa < sb){
      result = -1;
    }
    else {
      result = 0;
    }
    if ( result !== 0 ) {
      return result;
    }
  }
  return result;
}

解决方案3:

我大Python怎么会没有库

In [1]: from distutils.version import LooseVersion                                                                                                                                                                                                                                                                                                                                                
In [2]: LooseVersion('1.0.0')                                                                                                                                                                                  
Out[2]: LooseVersion ('1.0.0')                                                                                                                                                                                  
In [3]: LooseVersion('2.0')                                                                                                                                                                                
Out[3]: LooseVersion ('2.0')                                                                                                                                                                                    
In [4]: cmp(_2,_3)                                                                                                                                                     
Out[4]: -1
In [5]: LooseVersion('1.0b')                                                                                                                                                                       
Out[5]: LooseVersion ('1.0b')
In [7]: cmp(_2,_5)                                                                                                                                                                                  
Out[7]: -1

解决方案4:

也来贴一个Objective-C的:

@implementation NSString(Version)

-(BOOL) isOlderVersionThan:(NSString*)otherVersion
{
return ([self compare:otherVersion options:NSNumericSearch] == NSOrderedAscending);
}

-(BOOL) isNewerVersionThan:(NSString*)otherVersion
{
return ([self compare:otherVersion options:NSNumericSearch] == NSOrderedDescending);
}

@end

这看来是OC最简单的方法了,用NSString的compare方法,不知道有人这样用过没?

解决方案5:

首先你自己要有一个比较标准,比如数字升高版本号也偏大的话直接比较字符就好,用

String s1 = "2.2.1";
String s2 = "1.2";
String[] tmp1 = s1.split("\\.");
String[] tmp2 = s2.split("\\.");

然后逐项比较应该也可以吧?不过要注意长度不同类似于2.2和2.2.1的这种比较应该就可以了。

解决方案6:

  1. 利用自然排序算法,对版本号进行升序排序,后面的版本号自然比前面的版本号大
  2. 利用正则表达式匹配出 majorversion,minorversion,revision_nubmer,然后分别比较
  3. 将字符串用“.”分割后转化为大小为3的数组,不够的添加0,然后对数组进行比较

解决方案7:

SemVer for Objective-C
https://github.com/thisandagain/semver


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 求一处理字符串的算法
  • 求字符串版本号比较算法!
  • 分解字符串算法

相关文章

  • 2017-06-07 请教一个小问题,如何用正则来验证文件路径
  • 2017-06-07 python爬虫(python)py2exe问题求助
  • 2017-06-07 以8为基数还是以2^8为基数
  • 2017-06-07 王爽书关于实验十问题
  • 2017-06-07 (redis)缓存框架的选择-选择对的做对的事情
  • 2017-06-07 Python3类内部的函数调用总是报错
  • 2017-06-07 七牛新推出的融合cdn怎么用?
  • 2017-06-07 hibernate和中间件的问题
  • 2017-06-07 python中,input获取内容赋值和直接赋值有什么区别?
  • 2017-06-07 python关于存储文件的问题

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 如果图片一旦操作失误,可以回退吗?
    • (python)按照网上的教程上传文件,一直出现500错误
    • 测试HTML标签
    • 关于:EJB的JNDI名字在线等
    • JBoss启动时出问题了求教高手
    • python爬虫Python死循环处理不断输出的日志
    • 关于visiodrawingcontrol的使用
    • wordpress七牛云存储插件问题
    • 我把36的卸载了,也重启了,但是在cmd用python-V指令查看版本时,还是提示下图的python36
    • 机器学习实战代码中的split函数与strip函数疑惑

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有