Compare two version numbers version1 and version2.
If version1 > version2 return 1, if version1 < version2 return -1, otherwise return 0.
You may assume that the version strings are non-empty and contain only digits and the . character.
The
.
character does not represent a decimal point and is used to separate number sequences.
For instance,
2.5
is not "two and a half" or "half way to version three", it is the fifth second-level revision of the second first-level revision.
Here is an example of version numbers ordering:
0.1 < 1.1 < 1.2 < 13.37
方法
遍歷2個字符串菊卷,獲取版本號,遇到.時停止宝剖,比較版本號洁闰。如果版本號不同,返回1或-1万细;如果相同扑眉,繼續(xù)遍歷,如果其中1個字符串到了'\0', 繼續(xù)遍歷第2個字符串赖钞,直到2個字符串都遍歷到了'\0'腰素。
c代碼
#include <assert.h>
#include <string.h>
int compareVersion(char* version1, char* version2) {
int versionInt1, versionInt2;
while(*version1!='\0' || *version2!='\0') {
versionInt1 = 0;
while(*version1 != '.' && *version1!='\0') {
versionInt1 = versionInt1*10+*version1-'0';
version1++;
}
if(*version1 == '.')
version1++;
versionInt2 = 0;
while(*version2 != '.' && *version2!='\0') {
versionInt2 = versionInt2*10+*version2-'0';
version2++;
}
if(*version2 == '.')
version2++;
if(versionInt1 > versionInt2)
return 1;
else if(versionInt1 < versionInt2)
return -1;
}
return 0;
}
int main() {
assert(compareVersion("13.37", "13.37.2") == -1);
return 0;
}