题目描述:
如果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;
}