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;如果相同,继续遍历,如果其中1个字符串到了'\0', 继续遍历第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;
}