当前一些软件管家类工具,依据版本号进行版本升级。面试360的时候,陆总出的题目。 // 软件版本号由a.b.c.d四部门组成 其中a、b、c、d均为十进制正整数,位数最多为4位。判断2个版本号大小,先比较a,然后再依次比较b、c、d //str1 > str2 返回1 小于返回-1 相等返回0 xxxx . xxxx . xxxx . xxxx /* str1= 7.234.1000.2 str2= 32.1.334.5 返回-1 */ #include "stdafx.h" #include <stdio.h> #include <string.h> int Version(const char* str1, const char* str2) { int len1 =strlen(str1); int i=0; int j; int fRet; int num=0; while(i<len1) { if(str1[i]=='.' && str2[i]!='.') { //str1先遇到. fRet=-1; return fRet; } else if(str1[i]!='.' && str2[i]=='.') { //str2先遇到. fRet=1; return fRet; } else if(str1[i]=='.' && str2[i]=='.') { num=num+1; //str1与str2 .前边的位数一样 .向前数4个数 for(j=4;j>0;j--) { if((i-j)>=0) { if(str1[i-j]==str2[i-j]) { } else if(str1[i-j]>str2[i-j]) { fRet=1; return fRet; } else if(str1[i-j]<str2[i-j]) { fRet=-1; return fRet; } } } if(num==3) { for(j=1;j<5;j++) { if((i+j)<len1) { if(str1[i+j]==str2[i+j]) { fRet=0; } else if(str1[i+j]>str2[i+j]) { fRet=1; return fRet; } else if(str1[i+j]<str2[i+j]) { fRet=-1; return fRet; } } } } } i=i+1; } return fRet; } int main(int argc, char* argv[]) { do { char str1[30]={0}; char str2[30]={0}; printf("str1= "); scanf("%s",str1); printf("str2= "); scanf("%s",str2); int Ret=Version(str1,str2); if(Ret==1) { printf("str1 > str2 Ret= %d/n",Ret); } else if(Ret==-1) { printf("str1 < str2 Ret= %d/n",Ret); } else { printf("str1 = str2 Ret= %d/n",Ret); } } while (1); return 0; }