牛客--2019哔哩哔哩--比较两个版本字符串version1和version2

题目描述:
如果version1 > version2 返回1,如果 version1 < version2 返回-1,不然返回0.
输入的version字符串非空,只包含数字和字符.。.字符不代表通常意义上的小数点,只是用来区分数字序列。例如字符串2.5并不代表二点五,只是代表版本是第一级版本号是2,第二级版本号是5.
输入描述:
两个字符串,用空格分割。
每个字符串为一个version字符串,非空,只包含数字和字符.
输出描述:
只能输出1, -1,或0
输入:
0.1 1.1
输出:
-1
题意:
题目描述
题解
感觉题目有点坑
首页分别用两个数组存起来字符串1和字符串2的每个数字
然后比较
在前面数字都相等的情况下,比较两个数组的打下就可以了
代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;

const int maxn = 1000 + 5;
char s1[maxn],s2[maxn];
int a[maxn],b[maxn];

int main(){
    while(scanf("%s%s",s1,s2)!=EOF){
        int l1 = strlen(s1);
        int t1 = 0;
        int sum1 = 0;
        for(int i = 0; i < l1; i ++){
            if(s1[i] == '.'){
                a[t1 ++] = sum1;
                sum1 = 0;
            }
            else{
                int t = s1[i] - '0';
                sum1 = sum1 * 10 + t;
            }
        }
        a[t1 ++] = sum1;
        int l2 = strlen(s2);
        int t2 = 0;
        int sum2 = 0;
        for(int i = 0; i < l2; i ++){
            if(s2[i] == '.'){
                b[t2 ++] = sum2;
                sum2 = 0;
            }
            else{
                int t = s2[i] - '0';
                sum2 = sum2 * 10 + t;
            }
        }
        b[t2 ++] = sum2;
        int flag = 0;
        // for(int i = 0; i < t1; i ++) printf("%d ",a[i]);
        // cout<<endl;
        //for(int i = 0; i < t2; i ++) printf("%d ",b[i]);
        // cout<<endl;
        if(t1 > t2){
            flag = 1;
        }
        for(int i = 0; i < min(t1,t2); i ++){
            if(a[i] > b[i]){
                flag = 1;
                break;
            }
            else if(a[i] < b[i]){
                flag = -1;
                break;
            }
        }
        if(flag == 0 && t1 != t2){
            if(t1 > t2) flag = 1;
            else flag = -1;
        }
        printf("%d\n",flag);
    }
    return 0;
}

发布了228 篇原创文章 · 获赞 1 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/Ypopstar/article/details/105125697