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

来源:互联网 发布:excel 库存软件 编辑:程序博客网 时间:2024/05/01 09:35
//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;
}
原创粉丝点击