C++實現軟體版本號碼比較

來源:互聯網
上載者:User

標籤: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++實現軟體版本號碼比較

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.