zoukankan      html  css  js  c++  java
  • c++实现一个比较两个string类型的版本号的小demo

    在软件实现更新模块的时候,有可能会判断一下服务器上的版本的版本号和本地版本的版本号。

    下面有类似这样形式的版本号:string str = "0.0.0.1";

    分析一下可以看出,该版本号可以分为4个部分,下面就实现一个提取这4部分的功能函数:

     1 //通过string 参数获取版本号到version数组内
     2 //该函数是通过"."来分别获取4个整形值的
     3 //所以允许出现类似: "1000.20.3.5"
     4 
     5 void GetVersion(string str,int *version)
     6 {
     7     string st1("");
     8     int j = 0;
     9     for (int i = 0;i< str.size();i++)
    10     {
    11         if (str[i] == '.')
    12         {
    13             version[j++] = atoi(st1.c_str());
    14             st1 = "";
    15         }else
    16         {
    17             st1 += str[i];
    18         }
    19     }
    20     version[j++] = atoi(st1.c_str());
    21 }
    22 
    23 //////////////////////////////////////////////////////////////////////
    24 
    25 string strServerListVersion = "0.0.0.2 ";//服务器版本的版本号
    26 string strLocVersion = " 0.0.0.1";//本地版本的版本号
    27 int serverVersion[4] = {0};
    28 int locVersion[4] = {0};
    29 
    30 
    31 GetVersion(strServerListVersion ,serverVersion);
    32 
    33 GetVersion(strLocVersion ,locVersion);
    34 
    35 
    36 //比较两个版本
    37 int k = memcmp(locVersion,serverVersion,4);
    38 if (k == 0)
    39 {
    40    //版本相等
    41             
    42 }else if (k < 0)
    43 {
    44    //服务器版本高
    45 
    46 
    47 }else
    48 {
    49    //服务器版本低
    50 }

     功能不复杂,有用到类似版本号比较判断的,就可以直接拿走就可以用。

    之所以把获取的4个表示版本的值放在数组内,是为了更进一步的开发,比如升降版本:从1.5一下子降到1.0

    这时候就可以实现逻辑:通过数组获取版本差值,然后先从版本1.5降到1.4然后1.3然后1.2然后1.1最后才能到1.0

    而不是直接就从1.5一下子将到1.0

    一般更新升级的话都会调用 libbz2 使用patch的形式进行增量差分升级的,这里就不啰嗦了。

  • 相关阅读:
    strcpy,memset,memcpy三者之间的根本区别
    最便捷、最强大、速度最快的C++序列化框架
    C++读写二进制文件
    boost binary 序列化
    febird.dataio和boost.serialization性能对比
    Boost文本序列化和二进制序列化的效率比较
    Boost文本序列化和二进制序列化的效率比较
    c++的vector赋值方法汇总
    OCP-1Z0-051-V9.02-36题
    遍历list或map时删除元素(较巧妙)
  • 原文地址:https://www.cnblogs.com/wainiwann/p/3169978.html
Copyright © 2011-2022 走看看