软件版本号的检查和比较是我们经常要用到的一个功能,我自己写了一个函数,用起来还是挺方便的。

// 函数功能:执行字符串形式的版本比较
// 返回值:比较成功返回真,比较失败返回假
//         比较结果保存到nResult中
//         lpszVer1高于lpszVer2时nResult的值为1
//         lpszVer1低于lpszVer2时nResult的值为-1
//         lpszVer1等于lpszVer2时nResult的值为0
// 使用说明:安全的用法应当是先对函数返回值进行判断,返回为真时再检查nResult中的比较结果
BOOL CompareVersion(__in LPCTSTR lpszVer1, __in LPCTSTR lpszVer2, __out short & nResult)
{// 参数安全性检查if (lpszVer1 == NULL || lpszVer1[0] == _T('\0'))   return FALSE;if (lpszVer2 == NULL || lpszVer2[0] == _T('\0')) return FALSE;// 参数有效性检查for (size_t i = 0; i < _tcslen(lpszVer1); i++){// 如果指定版本号中的当前字符在0到9范围以外,并且不是分割点,就认为是无效的if ((lpszVer1[i] < _T('0') || lpszVer1[i] > _T('9')) && lpszVer1[i] != _T('.'))return FALSE;}for (size_t i = 0; i < _tcslen(lpszVer2); i++){// 如果指定版本号中的当前字符在0到9范围以外,并且不是分割点,就认为是无效的if ((lpszVer2[i] < _T('0') || lpszVer2[i] > _T('9')) && lpszVer2[i] != _T('.'))return FALSE;}// _tcstok_s函数会修改输入,所以先把版本字符串复制一份// 根据版本号的通常表示法,不必根据源版本字符串的大小从堆上申请空间,直接定义即可满足绝大多数需求,也能提高效率const short nMAX_VER_LEN = 64;TCHAR szVer1[nMAX_VER_LEN] = {0}, szVer2[nMAX_VER_LEN] = {0};StringCchCopy(szVer1, nMAX_VER_LEN - 1, lpszVer1);StringCchCopy(szVer2, nMAX_VER_LEN - 1, lpszVer2);const TCHAR szSeps[] = _T(".");LPTSTR lpszToken1 = NULL, lpszToken2 = NULL;LPTSTR lpszNextToken1 = NULL, lpszNextToken2 = NULL;lpszToken1 = _tcstok_s(szVer1, szSeps, &lpszNextToken1);lpszToken2 = _tcstok_s(szVer2, szSeps, &lpszNextToken2);// 进行逐级拆分while ((lpszToken1 != NULL) || (lpszToken2 != NULL)){int nNum1 = 0, nNum2 = 0;// 检查拆分结果if (lpszToken1 != NULL){nNum1 = _tstoi(lpszToken1);lpszToken1 = _tcstok_s(NULL, szSeps, &lpszNextToken1);}if (lpszToken2 != NULL){nNum2 = _tstoi(lpszToken2);lpszToken2 = _tcstok_s(NULL, szSeps, &lpszNextToken2);}// 执行比较if (nNum1 > nNum2){nResult = 1;break;}else if (nNum1 < nNum2){nResult = -1;break;}else{nResult = 0;}}return TRUE;
}

C++实现软件版本号比较相关推荐

  1. 软件版本号命名规范_软件发布版本介绍

    一. 软件版本阶段介绍 Alpha版: 此版本表示该软件在此阶段主要是以实现软件功能为主,通常只在软件开发者内部交流,一般而言,该版本软件的Bug较多,需要继续修改. Beta版: 该版本相对于α版已 ...

  2. 项目管理之软件版本号

    项目管理之软件版本号 摘要: 软件的版本号不同,其版本就有区别,版本号大全,大家看一下对软件的各个版本也有所了解. 版本大全: alphal 内部测试版 beta 外部测试版 demo 演示版 Enh ...

  3. 项目管理 软件版本号的命名格式和规则

    最近公司发布测试版,涉及软件的版本号管理,发现不同公司的版本号管理的方法都不一样,各有千秋.在这里展示个人认为还不错的版本号管理的方法. [1]版本命名规范 软件版本号有四部分组成: 第一部分为主版本 ...

  4. 软件版本号规则和命名规则

    1.  软件版本阶段说明 o    Base版: 此版本表示该软件仅仅是一个假页面链接,通常包括所有的功能和页面布局,但是页面中的功能都没有做完整的实现,只是做为整体网站的一个基础架构. o    A ...

  5. 软件版本号:命名、说明、规范

    一. 软件版本阶段说明 Alpha版: 此版本表示该软件在此阶段主要是以实现软件功能为主,通常只在软件开发者内部交流,一般而言,该版本软件的Bug较多,需要继续修改. Beta版: 该版本相对于α版已 ...

  6. 软件版本号讲解:什么是Alpha,Beta,RC,Release

    软件版本号讲解:什么是Alpha,Beta,RC,Release 关键字: 版本, alpha, beta, rc, release 一.软件版本阶段说明 Alpha版: 此版本表示该软件在此阶段主要 ...

  7. VC自动生成软件版本号

    VC自动生成软件版本号 flyfish 目的: 软件的版本有主版本号.子版本号.修正版本号.编译版本号 其中编译版本号与SVN服务器的版本号(Revision)自动同步. 环境 需要在本机安装Tort ...

  8. iapp对应java代码,『iApp代码』iApp调用java获取本软件版本号

    所需工具: 1.手机 2.iApp 3.手 4.脑子 教程开始 第一步: 创建一个名叫java的mjava模块 写入代码: import android.content.pm.PackageInfo; ...

  9. 各种软件版本号扫盲——Beta RC Preview release等

     1 .软件版本阶段说明 *Alpha 版:此版本表示该软件在此阶段主要是以实现软件功能为主,通常只在软件开发者内部交流,一般而言,该版本软件的 Bug 较多,需要继续修改. *Beta 版:该版 ...

  10. C语言软件版本号组成和定义

    软件版本号规范 一.软件版本号由四部分组成: 1. 主版本号 - X 2 .子版本号 - Y 3. 阶段版本号 - Z 4.日期版本号加希腊字母版本号(可选) 常用的希腊字母版本号:alpha.bet ...

最新文章

  1. 无线通信 -- 跳频技术
  2. Find non-overlap jobs with max cost
  3. falsk 请求没有返回值报错
  4. YII2 实现后台操作记录日志
  5. 训练日志 2018.10.18
  6. netstat -an|awk '/^tcp/ {++s[$NF]} END {for( a in s) {print a,s[a]}}'
  7. mysql user表空_Mysql User表为空
  8. Android kotlin中配置protobuf
  9. Git:常用命令(自用)
  10. c# 调用服务返回结果模板化
  11. paip.终端服务器超出了最大允许连接数的解决
  12. html制作象棋教程入门教程,canvas 纯js 绘制中国象棋棋盘
  13. stm32软件模拟i2c通讯读取lm75a温度
  14. golang项目 七牛图片管理系统 基于GIN
  15. 外卖联盟高级接口 - 美团联盟接口 美团外卖CPS+CPA推广活动推广API接口
  16. 用python绘制玫瑰花
  17. Maven项目在new module后,pom文件显示为Ignored pom.xml
  18. 【论文笔记】《SketchMate: Deep Hashing for Million-Scale Human Sketch Retrieval》
  19. Cesium空间分析-填挖方计算
  20. stm32学习笔记-1 STM32简介

热门文章

  1. sourcemap文件泄露漏洞
  2. 如何在 Linux、Windows 和 Mac 上查找 WiFi 密码?
  3. 计算机系统中输入汉字的方法有,有关中小学计算机汉字输入方法的思考
  4. QQ资料一键清空工具下载
  5. 面试王者的出装方案推荐——软技能篇(文末含岗位内推)
  6. 推荐几个免费练手的Java项目
  7. 百度搜索结果屏蔽百家号方法
  8. MATLAB实现动态规划算法,基于Matlab的动态规划算法的实现及应用
  9. 读《微电子与光电子集成电路技术》有感
  10. CNNIC IP 地址分配详情