class Solution {
public:
int compareVersion(string version1, string version2) {
int len1 = version1.length(), len2 = version2.length();
if(len1 == 0){
if(len2 == 0){
return 0;
}
return -1;
}
if(len2 == 0){
return 1;
}
vector<int> vec1, vec2;
const int maxlen = 500;
char str1[maxlen], str2[maxlen];
memset(str1, 0, sizeof(str1));
strcpy(str1, version1.c_str());
memset(str2, 0, sizeof(str2));
strcpy(str2, version2.c_str());
char* pEnd = str1;
while((int(pEnd - str1)) < len1){
int tmp = strtol(pEnd, &pEnd, 10);
vec1.push_back(tmp);
pEnd += 1;
}
char* pEnd2 = str2;
while((int(pEnd2 - str2)) < len2){
int tmp = strtol(pEnd2, &pEnd2, 10);
vec2.push_back(tmp);
pEnd2 += 1;
}
int size1 = vec1.size(), size2 = vec2.size();
int minsize = min(size1, size2);
for(int i = 0; i < minsize; ++i){
if(vec1[i] < vec2[i]){
return -1;
}
else if(vec1[i] > vec2[i]){
return 1;
}
}
//vec1[i] == vec2[i]
if(size1 == size2){
return 0;
}
int maxsize = max(size1, size2);
bool equal = true;
if(size1 > size2){
equal = true;
for(int idx = minsize; idx < maxsize; ++idx){
if(vec1[idx] != 0){
equal = false;
break;
}
}
if(!equal){
return 1;
}
return 0;
}
equal = true;
for(int idx = minsize; idx < maxsize; ++idx){
if(vec2[idx] != 0){
equal = false;
break;
}
}
if(!equal){
return -1;
}
return 0;
}
};
错误1:
corner cases:
1.0.0 和 1被看作是一个版本。。。这个没有想到。。。
错误2:
每次用完strtol后,要将pEnd+1,跳过’.’的情况~