C/C++ 简单实现版本比较
网上有各种实现方式,我觉得搞复杂了,没必要整那么多事...
版本字符串有很多表示形式,如:v 0.0.0.1;
v 0.0.0.2;
ver 0.0.0.1;
ver 0.0.0.2;
0.0.0.1;
0.0.0.2;
v 0.0.0.1_beta;
v 0.0.0.2_beta; 等等各种形式。
每一组版本号都有相同的格式,唯一不同的是版本号的数值,即:0.0.0.1和0.0.0.2不同,其他字符都相同。
而相同字符的ascii码都相等。所以可以比较ascii码来确定版本大小,类型转换都可以省了。
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
using namespace std;
/************************************************************************/
/* version_old == version_new return 0
version_old < version_new return 1
version_old > version_new return -1*/
/************************************************************************/
const int version_compare(const string& version_old, const string& version_new)
{
int lenf = 0;
if (version_old.size() < version_new.size())
lenf = version_old.size();
else
lenf = version_new.size();
for (int i = 0; i < lenf; ++i)
{
if (version_old[i] > version_new[i])
{
return -1; // 新版本大
}
else if (version_old[i] < version_new[i])
{
return 1; // 新版本小
}
// new_version[i] == old_version[i] 则继续比较下一位
}
return 0;
}
int main()
{
string versionold = "1.0.2.1";
string versionnew = "2.0.2.2";
if (version_compare(versionold, versionnew) == 1)
{
printf("%s > %s", versionnew.c_str(), versionold.c_str());
}
else
{
printf("%s <= %s", versionnew.c_str(), versionold.c_str());
}
getchar();
return 0;
}
git上有源码和测试环境介绍: https://github.com/lzyinformation/VersionCompare.git