C/C++ 版本比较demo分享
来源:互联网 发布:大数据平台是什么 编辑:程序博客网 时间:2024/06/16 20:18
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();elselenf = 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
阅读全文