更高效的比较版本号的方法。直接给大家上代码实例:
#include <string>
#include <vector>
#include <sstream>
int CompareVersion(const std::string& version1, const std::string& version2)
{
std::vector<int> v1, v2;
std::stringstream ss1(version1), ss2(version2);
std::string token;
while (std::getline(ss1, token, '.'))
{
v1.push_back(std::stoi(token));
}
while (std::getline(ss2, token, '.'))
{
v2.push_back(std::stoi(token));
}
size_t i = 0;
while (i < v1.size() && i < v2.size())
{
if (v1[i] > v2[i])
{
return 1;
}
else if (v1[i] < v2[i])
{
return -1;
}
i++;
}
if (v1.size() > v2.size())
{
return 1;
}
else if (v1.size() < v2.size())
{
return -1;
}
else
{
return 0;
}
}
int main()
{
std::string version1 = "1.2.3";
std::string version2 = "1.2.4";
int result = CompareVersion(version1, version2);
if (result == 1)
{
printf("%s is newer than %s\n", version1.c_str(), version2.c_str());
}
else if (result == -1)
{
printf("%s is older than %s\n", version1.c_str(), version2.c_str());
}
else
{
printf("%s and %s have the same version\n", version1.c_str(), version2.c_str());
}
return 0;
}
在上面的示例代码中,CompareVersion函数接受两个字符串形式的版本号作为参数,并返回一个整数值,表示它们的大小关系。如果第一个版本号大于第二个版本号,则返回1;如果第一个版本号小于第二个版本号,则返回-1;如果两个版本号相等,则返回0。
这个方法的思路是将版本号按照.分割成多个整数,然后逐个比较这些整数的大小。如果两个版本号的前几个整数相等,那么就比较它们的下一个整数,直到找到不相等的整数为止。如果一个版本号的整数比另一个版本号的整数多,那么就认为它更大。