情景:我有一个简单的应用程序,它检查其 RSS 提要并查看是否有可用的更新版本。因此,我想检查当前版本是否低于 RSS 提要中的版本。理想情况下很简单:
CURRENTVERSION < updateVersion
问题:版本控制由 major.minor.revision.build 组成,我不知道如何将其解析为数字以执行版本检查。
这些是要比较的参数:
#define CURRENTVERSION = 0,2,5,1
从网上下载的版本是"0.2.6.1"
(作为字符串)。
检查一个是否小于另一个的最佳方法是什么?
我试过将它转换为 double ,但值变成了 0.2(只有第一个 . 被解析,其余的被忽略)。
约束:它不能是使用 .NET 库的解决方案,因为应用程序必须在没有 .NET 框架的情况下工作。
(编辑)感谢 Karthik T 的回答,我选择了以下解决方案。
struct Version
{
Version(string versionStr)
{
sscanf(versionStr.c_str(), "%d.%d.%d.%d", &major, &minor, &revision, &build);
}
bool operator<(const Version &otherVersion)
{
if(major < otherVersion.major)
return true;
if(minor < otherVersion.minor)
return true;
if(revision < otherVersion.revision)
return true;
if(build < otherVersion.build)
return true;
return false;
}
int major, minor, revision, build;
};
最佳答案
struct Version{
Version(std::string versionStr); //remember to use versionStr.c_str() if using C functions like sscanf or strtok
bool operator<(const Version &other); // could and perhaps should be a free function
int major,minor,revision,build;
};
bool needtoUpdate = Version(CURRENTVERSION)<Version(latestVersion);
请填写定义。
此外,您的#define
是一个错误。你想要它像下面这样。或者,如果可以,请使用 const char *
。
#define CURRENTVERSION "0.2.5.1"
关于c++ - 如何解析版本号来比较呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14374272/