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;
}
时间: 2024-08-28 23:22:30

C++实现软件版本号比较的相关文章

软件版本号规范与命名原则

1. 软件版本阶段说明 * Alpha版: 此版本表示该软件在此阶段主要是以实现软件功能为主,通常只在软件开发者内部交流,一般而言,该版本软件的Bug较多,需要继续修改.* Beta版: 该版本相对于α版已有了很大的改进,消除了严重的错误,但还是存在着一些缺陷,需要经过多次测试来进一步消除,此版本主要的修改对像是软件的UI.* RC版: 该版本已经相当成熟了,基本上不存在导致错误的BUG,与即将发行的正式版相差无几.* Release版: 该版本意味“最终版本”,在前面版本的一系列测试版之后,终

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

最近公司发布测试版,涉及软件的版本号管理,发现不同公司的版本号管理的方法都不一样,各有千秋.在这里展示个人认为还不 错的版本号管理的方法. [1]版本命名规范 软件版本号有四部分组成: 第一部分为主版本号, 第二部分为次版本号, 第三部分为修订版本号, 第四部分为日期版本号加希腊字母版本号,希腊字母版本号共有五种,分别为base.alpha.beta .RC . release. [2]软件版本阶段说明 Base:  此版本表示该软件仅仅是一个假页面链接,通常包括所有的功能和页面布局,但是页面中

[转]软件版本号扫盲——Beta RC Preview release等

1.软件版本阶段说明 *Alpha版:此版本表示该软件在此阶段主要是以实现软件功能为主,通常只在软件开发者内部交流,一般而言,该版本软件的Bug较多,需要继续修改. *Beta版:该版本相对于α版已有了很大的改进,消除了严重的错误,但还是存在着一些缺陷,需要经过多次测试来进一步消除,此版本主要的修改对像是软件的UI. *RC版:该版本已经相当成熟了,基本上不存在导致错误的BUG,与即将发行的正式版相差无几. *Release版:该版本意味“最终版本”,在前面版本的一系列测试版之后,终归会有一个正

android获取当前软件版本号号和版本号名称

<span style="font-size:18px;">/** * 获取本地软件版本号 */ public static int getLocalVersion(Context ctx) { int localVersion = 0; try { PackageInfo packageInfo = ctx.getApplicationContext() .getPackageManager() .getPackageInfo(ctx.getPackageName(),

软件版本号命名规则

  1.版本命名规范 软件版本号有四部分组成,第一部分为主版本号,第二部分为次版本号,第三部分为修订版 本号,第四部分为日期版本号加希腊字母版本号,希腊字母版本号共有五种,分别为base.alpha.beta .RC . release   2.软件版本阶段说明 Base:此版本表示该软件仅仅是一个假页面链接,通常包括所有的功能和页面布局,但是    页面中的功能都没有做完整的实现,只是做为整体网站的一个基础架构. Alpha :软件的初级版本,表示该软件在此阶段以实现软件功能为主,通常只在软件

js实现软件版本号的比较

//js实现软件版本号的比较 //随机举两个例子 pc2.4.3 或者pc3.5.6 /** * 输入 v1,v2 * 返回true代表v1比v2的版本新,false则代表v1与v2相等或者v1<v2; */ function versionCompare(v1,v2){ //去掉收尾空格 v1 =v1.replace(/(^\s+)|(\s+$)/gi,""); v2 = v2.replace(/(^\s+)|(\s+$)/gi,""); //空检查 if(

软件版本号编写规范及说明

1.软件版本阶段说明 Base版: 此版本表示该软件仅仅是一个假页面链接,通常包括所有的功能和页面布局,但是页面中的功能都没有做完整的实现,只是做为整体网站的一个基础架构.Alpha版: 此版本表示该软件在此阶段主要是以实现软件功能为主,通常只在软件开发者内部交流,一般而言,该版本软件的Bug较多,需要继续修改.Beta版: 该版本相对于α版已有了很大的改进,消除了严重的错误,但还是存在着一些缺陷,需要经过多次测试来进一步消除,此版本主要的修改对像是软件的UI.RC版: 该版本已经相当成熟了,基

软件版本号规范和比较

1. 软件版本阶段说明 Base版: 此版本表示该软件仅仅是一个假页面链接,通常包括所有的功能和页面布局,但是页面中的功能都没有做完整的实现,只是做为整体网站的一个基础架构.Alpha版: 此版本表示该软件在此阶段主要是以实现软件功能为主,通常只在软件开发者内部交流,一般而言,该版本软件的Bug较多,需要继续修改.Beta版: 该版本相对于α版已有了很大的改进,消除了严重的错误,但还是存在着一些缺陷,需要经过多次测试来进一步消除,此版本主要的修改对像是软件的UI.RC版: 该版本已经相当成熟了,

软件版本号说明

一. 软件版本阶段说明 Alpha版: 此版本表示该软件在此阶段主要是以实现软件功能为主,通常只在软件开发者内部交流,一般而言,该版本软件的Bug较多,需要继续修改. Beta版: 该版本相对于α版已有了很大的改进,消除了严重的错误,但还是存在着一些缺陷,需要经过多次测试来进一步消除,此版本主要的修改对像是软件的UI. RC版: 该版本已经相当成熟了,基本上不存在导致错误的BUG,与即将发行的正式版相差无几. Release版: 该版本意味"最终版本",在前面版本的一系列测试版之后,终