class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 比较版本号
* @param version1 string字符串
* @param version2 string字符串
* @return int整型
*/

//将version按照‘.’进行划分
pair<string,int> obstr(string version, int st, int l)
{
    string str;
    while(version[st]=='0')
        st++;
    int i=st;
    for(;i<l;i++)
    {
        if(version[i]=='.')
        {
            str=version.substr(st,i-st);
            st=i+1;
            break;
        }
    }
    //到达末尾
    if(i==l)
    {
        str=version.substr(st,l-st);
        st=l;
    }
    pair<string,int> ans;
    ans.first=str;ans.second=st;
    return ans;
}

int compare(string version1, string version2) {
    // write code here
    int st1=0,st2=0,l1=version1.size(),l2=version2.size();
    while(st1<l1&&st2<l2)
    {
        string str1,str2;
        //获取str1
        pair<string,int> temp1=obstr(version1, st1, l1);
        str1=temp1.first; st1=temp1.second;
        pair<string,int> temp2=obstr( version2, st2, l2);
        str2=temp2.first; st2=temp2.second;
        //对画分的字符进行比较,如果str1的长度>str2 或者在俩者相等的情况下,str1<str2 均表示version1 <version2 反之亦然。
        if(str1.size()<str2.size()||(str1.size()==str2.size()&&str1<str2)) return -1;
        else if(str1.size()>str2.size()||(str1.size()==str2.size()&&str1>str2)) return 1;
    }
    //当version到达尾时需要判断version2在st2后的字符是否为0,若为0则需要去除‘0’后继续判断
    if(st1==l1&&st2<l2) 
    {
        if(version2[st2]!='0') return -1;
        //去除后继的0
        else
        {
            for(int i=st2;i<l2;i++)
            {
                if(isdigit(version2[i])&&version2[i]!='0') return -1;
            }
            return 0;
        }
    }

    else if(st2==l2&&st1<l1) 
    {
        if(version1[st1]!='0') return 1;
        else
        {
            for(int i=st1;i<l1;i++)
            {
                if(isdigit(version1[i])&&version2[i]!='0') return 1;

            }
            return 0;
        }
        return 1;
    }
    return 0;
}

};