Compare Version Numbers

Compare two version numbers version1 and version1.
If version1 > version2 return 1, if version1 < version2 return -1, otherwise return 0.

You may assume that the version strings are non-empty and contain only digits and the . character.
The . character does not represent a decimal point and is used to separate number sequences.
For instance, 2.5 is not "two and a half" or "half way to version three", it is the fifth second-level revision of the second first-level revision.

Here is an example of version numbers ordering:

0.1 < 1.1 < 1.2 < 13.37

C++实现代码:

#include<iostream>
#include<vector>
#include<string>
#include<sstream>
#include<cstdlib>
using namespace std;

class Solution {
public:
    int compareVersion(string version1, string version2) {
        istringstream is(version1);
        istringstream iss(version2);
        vector<string> vec1;
        vector<string> vec2;
        string tmp;
        while(getline(is,tmp,'.'))
        {
            vec1.push_back(tmp);
        }
        while(getline(iss,tmp,'.'))
        {
            vec2.push_back(tmp);
        }
        int len1=vec1.size();
        int len2=vec2.size();
        int i=0,j=0;
        while(i!=len1&&j!=len2)
        {
            if(atoi(vec1[i].c_str())<atoi(vec2[i].c_str()))
                return -1;
            else if(atoi(vec1[i].c_str())>atoi(vec2[i].c_str()))
                return 1;
            i++;
            j++;
        }
        if(i==len1&&j==len2)
            return 0;
        while(i!=len1)
        {
            if(atoi(vec1[i].c_str())!=0)
                return 1;
            i++;
        }
        while(j!=len2)
        {
            if(atoi(vec2[j].c_str())!=0)
                return -1;
            j++;
        }
        return 0;
    }
};

int main()
{
    string s1="01.23.0.0";
    string s2="01.23";
    Solution s;
    cout<<s.compareVersion(s1,s2)<<endl;
}
#include<iostream>
#include<string>
#include<cstring>
#include<cstdlib>
using namespace std;

class Solution
{
public:
    int compareVersion(string version1, string version2)
    {
        size_t  pos1=0;
        size_t  pos2=0;
        size_t index1;
        size_t index2;
        while(pos1<version1.size()&&pos2<version2.size())
        {
            index1=version1.find('.',pos1);
            index2=version2.find('.',pos2);
            if(index1==string::npos)
                index1=version1.size();
            if(index2==string::npos)
                index2=version2.size();
            if(atoi(version1.substr(pos1,index1-pos1).c_str())<atoi(version2.substr(pos2,index2-pos2).c_str()))
                return -1;
            else if(atoi(version1.substr(pos1,index1-pos1).c_str())>atoi(version2.substr(pos2,index2-pos2).c_str()))
                return 1;
            pos1=index1+1;
            pos2=index2+1;
        }
        while(pos1<version1.size())
        {
            index1=version1.find(pos1);
            if(index1==string::npos)
                index1=version1.size();
            if(atoi(version1.substr(pos1,index1-pos1).c_str())!=0)
                return 1;
            pos1=index1+1;
        }
        while(pos2<version2.size())
        {
            index2=version2.find(pos2);
            if(index2==string::npos)
                index2=version2.size();
            if(atoi(version2.substr(pos2,index2-pos2).c_str())!=0)
                return -1;
            pos2=index2+1;
        }
        return 0;
    }
};

int main()
{
    Solution s;
    cout<<s.compareVersion("","1.1")<<endl;
}

  

原文地址:https://www.cnblogs.com/wuchanming/p/4172654.html