版本號大小比較演算法

2021-09-07 08:16:35 字數 1433 閱讀 1937

版本號之間比較大小,本質上是比較字串之間的關係。這裡給定兩個版本號,你一定能迅速地區分出大小:

0.0.2

0.0.3

想要讓電腦程式分辨她們的關係,可以直接使用strcmp()函式獲取返回值,如果你在 ios 系統下程式設計,也可以使用 nsstring 類提供的- (nscomparisonresult)compare:(nsnumber *)decimalnumber方法。

但如果版本進化成下面這樣,上面所說的 api 一定會產生錯誤的結果。

2.7.14.2345

2.12.8.1234

因為單純的字串比較大小的依據是每個字元的 ascii 碼。程式會認為字元7比字元1大,結果就是第乙個版本號大於第二個版本號,這是錯誤的。

因此在識別之前,有必要了解一下版本號的組成部分,以及每乙個數字的意義,這裡已 gun 風格的版本號作為說明。

版本號大致以下幾個部分組成:

示例: 3.5.20.9527

在比較版本號時,正確的做法應該是,主版本號和主版本號比較,次版本號和次版本號比較等等。所以演算法的核心應該是分離出版本號的各個組成部分。由此產生的演算法會有多種。這裡列舉乙個方式最簡單粗暴的 c 語言**:

/**

* 比較版本號

* * @param v1 第乙個版本號

* @param v2 第二個版本號

* * @return 如果版本號相等,返回 0,

* 如果第乙個版本號低於第二個,返回 -1,否則返回 1.

*/int compareversion(const char *v1, const char *v2) ; char buf_v2[32] = ; char *i_v1 = strchr(p_v1, '.'); char *i_v2 = strchr(p_v2, '.'); if (!i_v1 || !i_v2) break; if (i_v1 != p_v1) else p_v1++; if (i_v2 != p_v2) else p_v2++; int order = atoi(buf_v1) - atoi(buf_v2); if (order != 0) return order < 0 ? -1 : 1; } double res = atof(p_v1) - atof(p_v2); if (res < 0) return -1; if (res > 0) return 1; return 0; }

test case:

int main(int argc, char *argv) 

比較版本號大小

適用於用.分隔的形式,如2.2.2的格式 1 前者大則返回乙個正數 2 後者大返回乙個負數 3 相等則返回0 return int if version1 null version2 null 注意此處為正則匹配,不能用.string versionarray1 version1.split str...

android 版本號大小比較

網上找了很多方法都不太靠譜,有問題,自己改了改,親試可以 1.主版本號 2.次版本號 3.修正版本號 4.編譯版本號 例如 2.1 3 3.7 5,10.2.0 在比較版本號時,正確的做法應該是,主版本號和主版本號比較,次版本號和次版本號比較等等,也就是把版本號分割,對應的組成之間進行比較,如下 版...

C 如何比較版本號大小

最近遇到了乙個資料遷移的問題,因為配置檔案的結構發生變化,所以要把低版本的使用者資料儲存下來,存到最新版本中去。這裡就有乙個比較版本號大小的問題了,網上亂七八糟演算法一堆,大致意思就是用分割字串的方法,比如2.1.2和2.2.4,挨個比較,用遞迴來處理等等的,其實c 自帶乙個類verson 可以滿足...