比较版本号的大小 新旧
程序员文章站
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;
}