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

// 函数功能:执行字符串形式的版本比较
// 返回值:比较成功返回真,比较失败返回假
//         比较结果保存到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. linux中如何查看某一进程的启动时间
  3. lunix系统安装及分区补充安装包
  4. Web的系统测试方法 (转载)
  5. .NET HttpGet 获取服务器文件下的图片信息 同步和异步方式处理
  6. CG-CTF-Web-COOKIE
  7. java无锁消费者框架_无锁并行框架多生产者多消费者模型
  8. datagrid底部显示水平滚动_看完《惊奇队长》等彩蛋,我想到了一个制作PPT滚动字幕的方法...
  9. ssh放行端口_安全组中已经添加规则放行SSH端口的访问之后如何使用f1 RTL
  10. 用相同jsp,js文件,同样的接口实现多页面构建
  11. 2021非科班生的Java面试之路,java思维导图笔记
  12. android怎么垂直居中,【Android】水平居中 垂直居中 中心居中
  13. 基于PyQT5制作一个二维码生成器
  14. Effective C++条款粗略总结
  15. LOL召唤师信息查询工具(可查服务器、段位、胜点,隐藏分、战斗力)
  16. 健身与不健身五年后的差别?你可不能轻易忽视!
  17. Mq报错:Caused by: com.rabbitmq.client.ShutdownSignalException
  18. 背景设置为透明RGB
  19. 【2016-05-09】程序员的日常:咖啡
  20. 三、多元线性回归模型(计量经济学学习笔记)

热门文章

  1. Linux桌面发行版必死,Linux 发行版/桌面 体验报告(细节向)
  2. 问世间美为何物? 来看2021“设计+”珠宝首饰创新设计展!
  3. mac笔记本上sublime安装google代码java格式化插件
  4. php 上取整函数是,PHP 取整函数参考
  5. Python实现网络通信中的套接字(Socket)
  6. 玄幻开局鸿蒙系统,玄幻开局鸿蒙圣骨
  7. 基于Bevy游戏引擎和FPGA的双人游戏
  8. 蓝牙Bluetooth BR/EDR 和 Bluetooth Smart 必需要知道的十个不同点
  9. 有人看了第一句就哭了
  10. 『Open3D』安装与点云格式通识