C++实现软件版本号比较
软件版本号的检查和比较是我们经常要用到的一个功能,我自己写了一个函数,用起来还是挺方便的。
// 函数功能:执行字符串形式的版本比较
// 返回值:比较成功返回真,比较失败返回假
// 比较结果保存到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++实现软件版本号比较相关推荐
- 软件版本号命名规范_软件发布版本介绍
一. 软件版本阶段介绍 Alpha版: 此版本表示该软件在此阶段主要是以实现软件功能为主,通常只在软件开发者内部交流,一般而言,该版本软件的Bug较多,需要继续修改. Beta版: 该版本相对于α版已 ...
- 项目管理之软件版本号
项目管理之软件版本号 摘要: 软件的版本号不同,其版本就有区别,版本号大全,大家看一下对软件的各个版本也有所了解. 版本大全: alphal 内部测试版 beta 外部测试版 demo 演示版 Enh ...
- 项目管理 软件版本号的命名格式和规则
最近公司发布测试版,涉及软件的版本号管理,发现不同公司的版本号管理的方法都不一样,各有千秋.在这里展示个人认为还不错的版本号管理的方法. [1]版本命名规范 软件版本号有四部分组成: 第一部分为主版本 ...
- 软件版本号规则和命名规则
1. 软件版本阶段说明 o Base版: 此版本表示该软件仅仅是一个假页面链接,通常包括所有的功能和页面布局,但是页面中的功能都没有做完整的实现,只是做为整体网站的一个基础架构. o A ...
- 软件版本号:命名、说明、规范
一. 软件版本阶段说明 Alpha版: 此版本表示该软件在此阶段主要是以实现软件功能为主,通常只在软件开发者内部交流,一般而言,该版本软件的Bug较多,需要继续修改. Beta版: 该版本相对于α版已 ...
- 软件版本号讲解:什么是Alpha,Beta,RC,Release
软件版本号讲解:什么是Alpha,Beta,RC,Release 关键字: 版本, alpha, beta, rc, release 一.软件版本阶段说明 Alpha版: 此版本表示该软件在此阶段主要 ...
- VC自动生成软件版本号
VC自动生成软件版本号 flyfish 目的: 软件的版本有主版本号.子版本号.修正版本号.编译版本号 其中编译版本号与SVN服务器的版本号(Revision)自动同步. 环境 需要在本机安装Tort ...
- iapp对应java代码,『iApp代码』iApp调用java获取本软件版本号
所需工具: 1.手机 2.iApp 3.手 4.脑子 教程开始 第一步: 创建一个名叫java的mjava模块 写入代码: import android.content.pm.PackageInfo; ...
- 各种软件版本号扫盲——Beta RC Preview release等
1 .软件版本阶段说明 *Alpha 版:此版本表示该软件在此阶段主要是以实现软件功能为主,通常只在软件开发者内部交流,一般而言,该版本软件的 Bug 较多,需要继续修改. *Beta 版:该版 ...
- C语言软件版本号组成和定义
软件版本号规范 一.软件版本号由四部分组成: 1. 主版本号 - X 2 .子版本号 - Y 3. 阶段版本号 - Z 4.日期版本号加希腊字母版本号(可选) 常用的希腊字母版本号:alpha.bet ...
最新文章
- 无线通信 -- 跳频技术
- Find non-overlap jobs with max cost
- falsk 请求没有返回值报错
- YII2 实现后台操作记录日志
- 训练日志 2018.10.18
- netstat -an|awk '/^tcp/ {++s[$NF]} END {for( a in s) {print a,s[a]}}'
- mysql user表空_Mysql User表为空
- Android kotlin中配置protobuf
- Git:常用命令(自用)
- c# 调用服务返回结果模板化
- paip.终端服务器超出了最大允许连接数的解决
- html制作象棋教程入门教程,canvas 纯js 绘制中国象棋棋盘
- stm32软件模拟i2c通讯读取lm75a温度
- golang项目 七牛图片管理系统 基于GIN
- 外卖联盟高级接口 - 美团联盟接口 美团外卖CPS+CPA推广活动推广API接口
- 用python绘制玫瑰花
- Maven项目在new module后,pom文件显示为Ignored pom.xml
- 【论文笔记】《SketchMate: Deep Hashing for Million-Scale Human Sketch Retrieval》
- Cesium空间分析-填挖方计算
- stm32学习笔记-1 STM32简介