BL7. 比较两个版本字符串version1和version2
描述
如果version1 > version2 返回1,如果 version1 < version2 返回-1,不然返回0.
输入的version字符串非空,只包含数字和字符.。.字符不代表通常意义上的小数点,只是用来区分数字序列。例如字符串2.5并不代表二点五,只是代表版本是第一级版本号是2,第二级版本号是5.
输入描述
两个字符串,用空格分割。输出描述
只能输出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; }