版權聲明:本文爲博主原創文章,遵循 CC 4.0 by-sa 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/hellokandy/article/details/78017827
在軟件更新時,需要根據版本號來決定是否需要自動更新,所以就涉及到版本號的對比了。
下面給出的是使用string的compare函數進行版本號判斷的代碼:
#include "stdafx.h"
#include <string>
#include <vector>
using namespace std;
vector<wstring> split_wstring(wstring &szInput, wstring &szToken)
{
vector<wstring> result;
int pos = 0;
int begin = 0;
const int size = szToken.size();
while (true)
{
pos = szInput.find(szToken, begin);
if (pos == wstring::npos)
{
result.push_back(szInput.substr(begin));
break;
}
result.push_back(szInput.substr(begin, pos - begin));
begin = pos + size;
}
return result;
}
//retval: 0:相等;1:大於服務器版本,-1:小於服務器版本,2:版本字段數不一致
int CompareVersion(std::wstring wszLoc, std::wstring wszSvr)
{
//
std::vector<std::wstring> locVerFields = split_wstring(wszLoc, std::wstring(L"."));
std::vector<std::wstring> srvVerFields = split_wstring(wszSvr, std::wstring(L"."));
int loc_size = locVerFields.size();
int srv_size = srvVerFields.size();
if (loc_size != srv_size)
{
return 2;
}
int retval = 0;
for(int i=0; i < locVerFields.size(); i++)
{
int istrcmp = 0;
istrcmp = locVerFields[i].compare(srvVerFields[i]);
if ( istrcmp == 0 )
{
if (i == locVerFields.size()-1)//最後一個
{
retval = 0;
break;
//return 0;
}
}
else if( istrcmp == 1)
{
retval = 1;
break;
//return 1;
}
else if (istrcmp < 0)
{
retval = -1;
break;
//return -1;
}
}
return retval;
}
int _tmain(int argc, _TCHAR* argv[])
{
std::wstring wszLocal = L"1.2.3.14";
std::wstring wszServer = L"1.2.3.15";
int res = CompareVersion(wszLocal, wszServer);
printf("%d\r\n", res);
system("pause");
return 0;
}