0%

compare-version-numbers

题目描述

比较两个版本号 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;
}

还是双指针厉害,但是我不会,并且现在不想写。