zoukankan      html  css  js  c++  java
  • 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;
    }
    

      

  • 相关阅读:
    Ubantu 查看系统资源占用
    C do {...} while (0) 在宏定义中的作用
    Redis架构设计
    Ubantu 安装boost环境
    Ubuntu 安装谷歌拼音输入法
    Ubuntu C/C++开发环境的安装和配置
    ubuntu 14.04英文环境设置成中文
    自己动手写可视化软件(代码已开源)
    探秘Tomcat——连接篇
    探秘Tomcat——连接器和容器的优雅启动
  • 原文地址:https://www.cnblogs.com/wuchanming/p/4172654.html
Copyright © 2011-2022 走看看