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