欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

比较版本号的大小 新旧

程序员文章站 2022-05-19 14:46:07
...

比较版本号的大小 新旧

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
using namespace std;

/************************************************************************/
/*                判断任意两个版本号的大小,数字越大代表版本越新            */
/************************************************************************/
#define V_LEN 50
#define INPUT_LEN 100
#define V_ARR_LEN 20

//3. 以'.'拆分
void divPoint(char *v, char *delims, int *v_arr)
{
    int i = 0;
    //int k = 0;
    char *result = NULL;
    result = strtok(v, delims);
    while(result != NULL)
    {
        v_arr[i++] = atoi(result);//字符串转换成整型数
        result = strtok(NULL, delims);
    }
    //for(k = 0;k < i; k++)
    //{
    //  printf("%d ", v1_arr[k]);
    //}
}

//4. 比较新版本
void newVersion(int *v1_arr, int *v2_arr)
{
    int i = 0;
    for (i = 0; i <= V_ARR_LEN; i++)
    {
        if (v1_arr[i] < v2_arr[i])
        {
            cout<<-1;
            break;
        }
        else if(v1_arr[i] > v2_arr[i])
        {
            cout<<1;
            break;
        }
        if (i == V_ARR_LEN)
        {
            cout<<0;
            break;
        }
    }
}

int main()
{
    string s;
    char input[INPUT_LEN] = {0};
    char v1[V_LEN] = {0};
    char v2[V_LEN] = {0};

    int v1_arr[V_ARR_LEN] = {0};
    int v2_arr[V_ARR_LEN] = {0};
    int i = 0;
    char *ret = NULL;
    char delims[] = ".";

BEGIN:
    //1. 输入两个版本号 以空格隔开
    getline(cin, s);
    //s = "12.34 56.78";
    strncpy(input,s.c_str(), s.length());
    //printf("%s\n", input);

    //判断输入格式中是否有空格
    ret = strchr(input, ' ');
    if (ret == NULL)
    {
        cout<<"usage:1.2.5空格2.7"<<endl;
        goto BEGIN;
    }

    //2. 以空格 隔开 两个版本
    while(input[i++] != ' ');
    strncpy(v1, input, i);
    strncpy(v2, &input[i], strlen(input));

    //3. 以'.'拆分
    divPoint(v1, delims, v1_arr);
    divPoint(v2, delims, v2_arr);

    cout<<endl;
    //4. 比较新版本
    newVersion(v1_arr, v2_arr);

    cout<<endl;
    system("pause");
    return 0;
}