版本号比较

#include <vector>
#include <string>
std::vector<std::string>split_string(std::string input,std::string spilt_token)
{
    std::vector<std::string> ret;
    int find_pos;
    int start_pos=0;
    int token_len=spilt_token.length();
    while((find_pos=input.find(spilt_token,start_pos))>=0)
    {
        ret.push_back(input.substr(start_pos,find_pos-start_pos));
        start_pos=find_pos+token_len;
    }
    return ret;
}
/*return 0 meanning  new_version and old_version is equal
-1 while new_version is older than old_version
1 while new_version is newer than old_version*/
int compare_version_info(std::string new_version,std::string old_version)
{
    std::vector<std::string> version1=split_string(new_version,".");
    std::vector<std::string> version2=split_string(old_version,".");
    int compare_size=version1.size()<version2.size()?version1.size():version2.size();
    for(int i=0;i<compare_size;i++)
    {
        int same=version1[i].compare(version2[i]);
        if(same==0)continue;
        else
        {
            if(std::stoi(version1[i])==0&&std::stoi(version2[i])==0)continue;
            return same>0?1:-1;
        }
    }
    if(version1.size()==version2.size())
    {
        return 0;
    }
    else if(version1.size()>version2.size())
    {
        for(int k=version2.size();k<version1.size();k++)
        {
            if(std::stoi(version1[k])!=0)return 1;
        }
        return 0;
    }
    else
    {
        for(int k=version1.size();k<version2.size();k++)
        {
            if(std::stoi(version2[k])!=0)return -1;
        }
        return 0;
    }
}

测试:

version1="2.1.0.0";
version2="2.1.0";

返回:0

version1="2.2.0";
version2="2.1.0.0";

返回:1

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值