c++ - 将版本作为字符串进行比较

标签 c++ string-comparison version-numbering

将版本号作为字符串进行比较并不那么容易...
“1.0.0.9” > “1.0.0.10”,但不正确。
正确执行此操作的明显方法是解析这些字符串,转换为数字并作为数字进行比较。 还有另一种方法可以更“优雅”地做到这一点吗?例如,boost::string_algo...

最佳答案

我看不出有什么比解析更优雅的了——但是使用已经存在的标准库设施。假设您不需要错误检查:

void Parse(int result[4], const std::string& input)
{
    std::istringstream parser(input);
    parser >> result[0];
    for(int idx = 1; idx < 4; idx++)
    {
        parser.get(); //Skip period
        parser >> result[idx];
    }
}

bool LessThanVersion(const std::string& a,const std::string& b)
{
    int parsedA[4], parsedB[4];
    Parse(parsedA, a);
    Parse(parsedB, b);
    return std::lexicographical_compare(parsedA, parsedA + 4, parsedB, parsedB + 4);
}

任何更复杂的东西都将更难维护,不值得你花时间。

关于c++ - 将版本作为字符串进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2941491/

相关文章:

c++ - makefile 延迟变量扩展

c++ - 使用 cin 输入数组值

c# - 优化C#中的字符串比较

java - 对列表中的不同类型字符串进行排序

比较c中的版本号

c++ - 为什么将 COM 指针参数强制转换为 void 而不是 IUnknown?

jquery - SQL查询: similar text in Database

python - 使用 pyproject.toml 时 setuptools 未获取动态版本

version-numbering - 使用什么作为初始版本?

c++ - 在不使用 lambda 的情况下,我如何巧妙地创建一个给定表达式的函数?