题目描述
比较两个版本号 version1 和 version2。如果 version1 > version2 返回 1,如果 version1 < version2 返回 -1, 除此之外返回 0。
假设版本字符串非空,并且只包含数字和 . 字符。 . 字符用于分隔数字序列。版本号的每一级的默认修订版号为 0。
题解
先切割,再分段比较。
c++没有split函数,借助strtok函数来切割字符串。char strtok (char str, char * delim); 以delim为分隔符分割字符串str。返回从str开头开始的一个被分割的字符串。当没有被分割时则返回null。
int atoi(const char *str) 返回转换后的长整数,如果没有执行有效的转换,则返回零。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| int compareVersion(string version1, string version2) { vector<int> vec1, vec2; char *p, *q; p = strtok(&version1[0], "."); while (p) { if (p)vec1.push_back(atoi(p)); cout << p << endl; p = strtok(NULL, "."); } cout << "--------" << endl; q = strtok(&version2[0], "."); while (q) { vec2.push_back(atoi(q)); cout << q << endl; q = strtok(NULL, "."); } int size1 = vec1.size(); int size2 = vec2.size(); int size = size1 < size2 ? size1 : size2; for (int i = 0; i < size; i++) { if (vec1[i] < vec2[i])return -1; else if (vec1[i] > vec2[i])return 1; } if (size == size1) { for (int i = size; i < size2; i++) if (vec2[i] > 0)return -1; } if (size == size2) { for (int i = size; i < size1; i++) if (vec1[i] > 0)return 1; } return 0; }
|
还是双指针厉害,但是我不会,并且现在不想写。