列表

详情


BL7. 比较两个版本字符串version1和version2

描述

如果version1 > version2 返回1,如果 version1 < version2 返回-1,不然返回0.

输入的version字符串非空,只包含数字和字符..字符不代表通常意义上的小数点,只是用来区分数字序列。例如字符串2.5并不代表二点五,只是代表版本是第一级版本号是2,第二级版本号是5.

输入描述

两个字符串,用空格分割。
每个字符串为一个version字符串,非空,只包含数字和字符.

输出描述

只能输出1, -1,或0

示例1

输入:

0.1 1.1

输出:

-1

原站题解

C 解法, 执行用时: 2ms, 内存消耗: 348KB, 提交时间: 2021-09-22

#include <stdio.h>
#include <string.h>

int compare(char* version1, char* version2 ) {
    int len1=strlen(version1),len2=strlen(version2);
    int p1=0,p2=0;
    int sum1=0,sum2=0;
    while(p1<len1 || p2<len2)
    {
        while(version1[p1]!='.' && p1<len1)
            sum1=sum1*10+(version1[p1++]-48);
        while(version2[p2]!='.' && p2<len2)
            sum2=sum2*10+(version2[p2++]-48);
        if(sum1>sum2)
            return 1;
        if(sum1<sum2)
            return -1;
        sum1=0;
        sum2=0;
        p1++;
        p2++;
    }
    return 0;
}

int main()
{
    char s[1000],t[1000];
    scanf("%s %s",s,t);
    printf("%d",compare(s,t));
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 360KB, 提交时间: 2019-08-07

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int main(void)
{
    char s1[1000],s2[1000],num1[1000],num2[1000];
    scanf("%s",s1);
    scanf("%s",s2);
    int i,j,re,len,len1=strlen(s1),len2=strlen(s2);
    for(i=0,j=0,re=0;i<len1&&j<len2;i++,j++)
    {
        len=0;
        while(isdigit(s1[i]))
        {
            num1[len++]=s1[i];
            i++;
        }
        num1[len]='\0';
        len=0;
        while(isdigit(s2[j]))
        {
            num2[len++]=s2[j];
            j++;
        }
        num2[len]='\0';
        if(strlen(num1)>strlen(num2)||(strlen(num1)==strlen(num2)&&strcmp(num1,num2)>0))
        {
            re=1;
            printf("%d",re);
            return 0;
        }
        else if(strlen(num1)<=strlen(num2)&&strcmp(num1,num2)<0)
        {
            re=-1;
            printf("%d",re);
            return 0;
        }
    }
    if(i<len1)
    {
        re=1;
        printf("%d",re);
    }
    else if(j<len2)
    {
        re=-1;
        printf("%d",re);
    }
    else
        printf("%d",re);
    return 0;
}

C++ 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2020-12-12

#include <iostream>
#include <sstream>
using namespace std;

int main(void) {
    string version1, version2;

    cin >> version1 >> version2;

    stringstream ver_ss1(version1), ver_ss2(version2);

    string seg1, seg2;
    while (getline(ver_ss1, seg1, '.') && getline(ver_ss2, seg2, '.')) {
        if (stoi(seg1) > stoi(seg2)) {
            cout << 1 << endl;
            return 0;
        }
        else if (stoi(seg1) < stoi(seg2)) {
            cout << -1 << endl;
            return 0;
        }
        else {}
    }

    if (version1.size() < version2.size()) {
        cout << -1 << endl;
        return 0;
    }
    else if (version1.size() > version2.size()) {
        cout << 1 << endl;
        return 0;
    }
    else {
        cout << 0 << endl;
        return 0;
    }
}

C 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2020-05-19

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int main(void)
{
    char s1[1000],s2[1000],num1[1000],num2[1000];
    scanf("%s",s1);
    scanf("%s",s2);
    int i,j,re,len,len1=strlen(s1),len2=strlen(s2);
    for(i=0,j=0,re=0;i<len1&&j<len2;i++,j++)
    {
        len=0;
        while(isdigit(s1[i]))
        {
            num1[len++]=s1[i];
            i++;
        }
        num1[len]='\0';
        len=0;
        while(isdigit(s2[j]))
        {
            num2[len++]=s2[j];
            j++;
        }
        num2[len]='\0';
        if(strlen(num1)>strlen(num2)||(strlen(num1)==strlen(num2)&&strcmp(num1,num2)>0))
        {
            re=1;
            printf("%d",re);
            return 0;
        }
        else if(strlen(num1)<=strlen(num2)&&strcmp(num1,num2)<0)
        {
            re=-1;
            printf("%d",re);
            return 0;
        }
    }
    if(i<len1)
    {
        re=1;
        printf("%d",re);
    }
    else if(j<len2)
    {
        re=-1;
        printf("%d",re);
    }
    else
        printf("%d",re);
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2020-05-18

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int main(void)
{
    char s1[1000],s2[1000],num1[1000],num2[1000];
    scanf("%s",s1);
    scanf("%s",s2);
    int i,j,re,len,len1=strlen(s1),len2=strlen(s2);
    for(i=0,j=0,re=0;i<len1&&j<len2;i++,j++)
    {
        len=0;
        while(isdigit(s1[i]))
        {
            num1[len++]=s1[i];
            i++;
        }
        num1[len]='\0';
        len=0;
        while(isdigit(s2[j]))
        {
            num2[len++]=s2[j];
            j++;
        }
        num2[len]='\0';
        if(strlen(num1)>strlen(num2)||(strlen(num1)==strlen(num2)&&strcmp(num1,num2)>0))
        {
            re=1;
            printf("%d",re);
            return 0;
        }
        else if(strlen(num1)<=strlen(num2)&&strcmp(num1,num2)<0)
        {
            re=-1;
            printf("%d",re);
            return 0;
        }
    }
    if(i<len1)
    {
        re=1;
        printf("%d",re);
    }
    else if(j<len2)
    {
        re=-1;
        printf("%d",re);
    }
    else
        printf("%d",re);
    return 0;
}

上一题