比较c中的版本号

标签 c string-comparison version-numbering

我在其他语言中看到了很多关于此问题的答案,但我正在尝试找出一种方法来比较以字符串形式给出的 2 个版本号。例如

str1 = "141.1.23"
str2 = "141.1.22"

我正在尝试找到一种方法来比较字符串中的整数值,看看哪个更大。 (在这种情况下 str1 会更大)。我考虑过与 atoi 和 strtok 结合使用,但我知道我无法一次标记 2 个字符串。有什么建议吗?

最佳答案

我真的很想知道为什么人们在 C 中有 sscanf 的情况下努力寻求如此复杂的解决方案。这是该问题的一个非常简单的解决方案,适用于 99% 的所有用例:

int compVersions ( const char * version1, const char * version2 ) {
    unsigned major1 = 0, minor1 = 0, bugfix1 = 0;
    unsigned major2 = 0, minor2 = 0, bugfix2 = 0;
    sscanf(version1, "%u.%u.%u", &major1, &minor1, &bugfix1);
    sscanf(version2, "%u.%u.%u", &major2, &minor2, &bugfix2);
    if (major1 < major2) return -1;
    if (major1 > major2) return 1;
    if (minor1 < minor2) return -1;
    if (minor1 > minor2) return 1;
    if (bugfix1 < bugfix2) return -1;
    if (bugfix1 > bugfix2) return 1;
    return 0;
}

在这里,试一试: https://ideone.com/bxCjsb

关于比较c中的版本号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15057010/

相关文章:

c - C 中 Sizeof 的行为

c# - InvariantCulture 和 Ordinal 字符串比较的区别

java - 尝试编写我自己的字符串比较方法 - Java

ios - 将 iOS 应用程序版本号设置为表示 UTC 中当前日期时间的整数

C - 剪刀石头布计分板问题

c - 在 git index 中添加了修改后的文件,但该文件未更改为暂存文件

.net - string1 >= string2 未在 Linq to SQL 中实现,有什么解决方法吗?

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

version-numbering - 如何区分测试版和普通版?

c - 如何制作像这样的输入的邻接矩阵