#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