数字版本比较(不考虑带字母的版本号)

//if (0  == iResult)//旧
//{
//    strResult = _T("旧版本");
//}
//else if(1 == iResult)//新
//{
//    strResult = _T("新版本");
//}
//else if (10 == iResult)
//{
//    strResult = _T("版本相同");
//    //用作异常处理或者其他用途,暂时不启用
//}
int CVersionCompareDlg::CompareVersion(CString strNewVersion, CString strOldVersion)
{
    int iResult = -1;

    if (strNewVersion.IsEmpty() || strOldVersion.IsEmpty())//版本数据异常
    {
        return iResult;
    }

    int iNewStartIndex = 0, iNewEndIndex = 0;//新版本的开始、结束序号
    int iOldStartIndex = 0, iOldEndIndex = 0;//旧版本的开始、结束序号
    int iNewVersion = 0, iOldVersion = 0;//新、旧子版本
    CString strNewSubVersion, strOldSubVersion;//新、旧子版本

    char *szVersion = NULL;

    do
    {
        iNewEndIndex = strNewVersion.Find('.', iNewStartIndex);
        iOldEndIndex = strOldVersion.Find('.', iOldStartIndex);

        strNewSubVersion.Empty();//清空子版本
        strOldSubVersion.Empty();//清空子版本

        iNewVersion = 0;
        iOldVersion = 0;

        //新版本处理 开始
        if (-1 == iNewEndIndex)//没有找到点号
        {
            //取剩下的全部字符
            strNewSubVersion = strNewVersion.Mid(iNewStartIndex);

            //设置开始位置
            iNewStartIndex = strNewVersion.GetLength();
        }
        else//找到了点号
        {
            //取区段字符
            strNewSubVersion = strNewVersion.Mid(iNewStartIndex, iNewEndIndex - iNewStartIndex);

            //设置开始位置
            iNewStartIndex = iNewEndIndex + 1;
        }

        if (!strNewSubVersion.IsEmpty())//找到字符则计算版本号
        {
            iNewVersion = GetVersionInt(&strNewSubVersion);
        }
        else//没有找到字符版本置0
        {
            iNewVersion = 0;
        }
        //新版本处理 结束

        //旧版本处理 开始
        if (-1 == iOldEndIndex)//没有找到点号
        {
            //取剩下的全部字符
            strOldSubVersion = strOldVersion.Mid(iOldStartIndex);

            //设置开始位置
            iOldStartIndex = strOldVersion.GetLength();
        }
        else//找到了点号
        {
            //取区段字符
            strOldSubVersion = strOldVersion.Mid(iOldStartIndex, iOldEndIndex - iOldStartIndex);

            //设置开始位置
            iOldStartIndex = iOldEndIndex + 1;
        }

        if (!strOldSubVersion.IsEmpty())//找到字符则计算版本号(没有找到的情况下已经置0)
        {
            iOldVersion = GetVersionInt(&strOldSubVersion);
        }
        else//没有找到字符版本置0
        {
            iOldVersion = 0;
        }
        //旧版本处理 结束


        //比较版本 开始
        if (iNewVersion > iOldVersion)
        {
            return 1;
        }
        else if (iNewVersion < iOldVersion)
        {
            return 0;
        }
        //比较版本 结束

    } while (!(iNewEndIndex == -1 && iOldEndIndex == -1));

    iResult = 10;
    return iResult;
}


// 删除字符串中开始部分的0
int CVersionCompareDlg::GetVersionInt(CString *pstrSource)
{
    int iSourceLength = pstrSource->GetLength();
    int iVersion = 0;
    int iTemp = 0;
    TCHAR chTemp[2];
    for (int i = 0; i < iSourceLength; i ++)
    {
        if ('0' != pstrSource->GetAt(i))
        {
            chTemp[0] = pstrSource->GetAt(i);
            iTemp = atoi((char *)chTemp);
            if (0 != iTemp)
            {
                for(int iMi = 0; iMi < iSourceLength - i - 1; iMi ++)
                {
                    iTemp = iTemp * 10;
                }
            }
            iVersion += iTemp;
        }
    }

    return iVersion;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值