c++ - 如何解析版本号来比较呢?

标签 c++ parsing version-numbering

情景:我有一个简单的应用程序,它检查其 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"

您可以使用 sscanf或类似 strtok 的东西在构造函数中解析。

关于c++ - 如何解析版本号来比较呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14374272/

相关文章:

java - 告诉 SAX 解析器忽略无效字符?

跨 3 个平台的 Xamarin 移动应用版本号方案

c++ - 反转 c 类型的字符串

c++ - 帮助构建 boost asio ssl 示例

c - 如何检查特定字符是否按相同顺序出现?

python - 如何使用 Beautifulsoup 解析网站

git - 修订号的 Git 等价物是什么?

maven - 如何为使用 Maven 构建的 Eclipse 插件自动化版本号更新过程

c++ - 为我的应用程序搜索框架

c++ - 如何将 CString 转换为 byte[] 数组?