go 比较两个版本号大小
发布时间:2022-09-27 13:53:34
热度: 517 ℃
<pre class="line-numbers language-go"><code class=" language-go"><span class="token keyword">package</span> main
<span class="token keyword">import</span> <span class="token punctuation">(</span>
<span class="token string">"fmt"</span> <span class="token comment">// 格式化输出的包</span>
<span class="token string">"strconv"</span> <span class="token comment">//实现了基本数据类型和其字符串表示的相互转换。 </span>
<span class="token string">"strings"</span> <span class="token comment">// strings包实现了用于操作字符的简单函数。</span>
<span class="token punctuation">)</span>
<span class="token comment">/*
比较两个版本号 version1 和 version2。
如果 version1 > version2 返回 1,如果 version1 < version2 返回 -1, 除此之外返回 0。
你可以假设版本字符串非空,并且只包含数字和 . 字符。
. 字符不代表小数点,而是用于分隔数字序列。
例如,2.5 不是“两个半”,也不是“差一半到三”,而是第二版中的第五个小版本。
你可以假设版本号的每一级的默认修订版号为 0。例如,版本号 3.4 的第一级(大版本)和第二级(小版本)修订号分别为 3 和 4。其第三级和第四级修订号均为 0。
示例 1:
输入: version1 = "0.1", version2 = "1.1"
输出: -1
示例 2:
输入: version1 = "1.0.1", version2 = "1"
输出: 1
示例 3:
输入: version1 = "7.5.2.4", version2 = "7.5.3"
输出: -1
示例 4:
输入:version1 = "1.01", version2 = "1.001"
输出:0
解释:忽略前导零,“01” 和 “001” 表示相同的数字 “1”。
示例 5:
输入:version1 = "1.0", version2 = "1.0.0"
输出:0
解释:version1 没有第三级修订号,这意味着它的第三级修订号默认为 “0”。
*/</span>
<span class="token keyword">func</span> <span class="token function">compareVersion</span><span class="token punctuation">(</span>version1 <span class="token builtin">string</span><span class="token punctuation">,</span> version2 <span class="token builtin">string</span><span class="token punctuation">)</span> <span class="token builtin">int</span> <span class="token punctuation">{</span>
<span class="token keyword">var</span> res <span class="token builtin">int</span>
<span class="token comment">// 通过字符串切割会生成一个数组</span>
ver1Strs <span class="token operator">:=</span> strings<span class="token punctuation">.</span><span class="token function">Split</span><span class="token punctuation">(</span>version1<span class="token punctuation">,</span> <span class="token string">"."</span><span class="token punctuation">)</span> <span class="token comment">//[1 2 3]</span>
ver2Strs <span class="token operator">:=</span> strings<span class="token punctuation">.</span><span class="token function">Split</span><span class="token punctuation">(</span>version2<span class="token punctuation">,</span> <span class="token string">"."</span><span class="token punctuation">)</span> <span class="token comment">//[2 3 4 5]</span>
ver1Len <span class="token operator">:=</span> <span class="token function">len</span><span class="token punctuation">(</span>ver1Strs<span class="token punctuation">)</span>
ver2Len <span class="token operator">:=</span> <span class="token function">len</span><span class="token punctuation">(</span>ver2Strs<span class="token punctuation">)</span>
<span class="token comment">//fmt.Println(ver1Strs, ver2Strs)</span>
verLen <span class="token operator">:=</span> ver1Len
<span class="token keyword">if</span> <span class="token function">len</span><span class="token punctuation">(</span>ver1Strs<span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token function">len</span><span class="token punctuation">(</span>ver2Strs<span class="token punctuation">)</span> <span class="token punctuation">{</span>
verLen <span class="token operator">=</span> ver2Len
<span class="token punctuation">}</span>
<span class="token keyword">for</span> i <span class="token operator">:=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator"><</span> verLen<span class="token punctuation">;</span> i<span class="token operator">++</span> <span class="token punctuation">{</span>
<span class="token keyword">var</span> ver1Int<span class="token punctuation">,</span> ver2Int <span class="token builtin">int</span>
<span class="token keyword">if</span> i <span class="token operator"><</span> ver1Len <span class="token punctuation">{</span>
<span class="token comment">// 字符串转换成整数strconv.Atoi</span>
ver1Int<span class="token punctuation">,</span> <span class="token boolean">_</span> <span class="token operator">=</span> strconv<span class="token punctuation">.</span><span class="token function">Atoi</span><span class="token punctuation">(</span>ver1Strs<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token keyword">if</span> i <span class="token operator"><</span> ver2Len <span class="token punctuation">{</span>
ver2Int<span class="token punctuation">,</span> <span class="token boolean">_</span> <span class="token operator">=</span> strconv<span class="token punctuation">.</span><span class="token function">Atoi</span><span class="token punctuation">(</span>ver2Strs<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token keyword">if</span> ver1Int <span class="token operator"><</span> ver2Int <span class="token punctuation">{</span>
res <span class="token operator">=</span> <span class="token operator">-</span><span class="token number">1</span>
<span class="token keyword">break</span>
<span class="token punctuation">}</span>
<span class="token keyword">if</span> ver1Int <span class="token operator">></span> ver2Int <span class="token punctuation">{</span>
res <span class="token operator">=</span> <span class="token number">1</span>
<span class="token keyword">break</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token keyword">return</span> res
<span class="token punctuation">}</span>
<span class="token keyword">func</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
version1 <span class="token operator">:=</span> <span class="token string">"0.1"</span>
version2 <span class="token operator">:=</span> <span class="token string">"1.1"</span>
fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span><span class="token function">compareVersion</span><span class="token punctuation">(</span>version1<span class="token punctuation">,</span> version2<span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span>
</code></pre><div><code class=" language-go"><span class="token punctuation"><br></span></code></div>