我在其他语言中看到了很多关于此问题的答案,但我正在尝试找出一种方法来比较以字符串形式给出的 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/