问题描述
解题思路
- 正则,使用
'.'
进行分割,然后使用结果数组进行判断,对于前导0,字符串转数字函数会自动处理掉。 - stringstream,自己使用的是这个方法,使用getline进行分割,随后进行相互判断,因为两个版本号长度可能不同(用点分隔后的小段),所以在整体处理完后,需要特别处理剩余的。
ac代码
int compare(string version1, string version2) {
istringstream iss1(version1), iss2(version2);
string v1, v2;
while(!iss1.eof() && !iss2.eof()){
getline(iss1, v1, '.');
getline(iss2, v2, '.');
int v1i = atoi(v1.c_str()), v2i = atoi(v2.c_str());
if(v1i > v2i){
return 1;
}else if(v1i < v2i){
return -1;
}
}
while(!iss1.eof() && iss2.eof()){
getline(iss1, v1, '.');
int v = atoi(v1.c_str());
if(v != 0){
return 1;
}
}
while(iss1.eof() && !iss2.eof()){
getline(iss2, v2, '.');
int v = atoi(v2.c_str());
if(v != 0){
return -1;
}
}
return 0;
}