C++ 软件版本号对比
在软件更新时,需要根据版本号来决定是否需要自动更新,所以就涉及到版本号的对比了。
下面给出的是使用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 ", res); system("pause"); return 0; }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: DB2基础操作(Linux平台)
- 下一篇: DB2 最佳实践: 性能调优和问题诊断最佳实践