比较 QString 中的两个数字

Compare two numbers in a QString

有两个值:

QString str1 = "3.5.8", str2 = "20.3.6";

让我们假设这两个 numbers 代表软件 version

已知QString是逐字比较

如果我们以这种方式处理这个决定会怎样:

str1.replace(".","");
str2.replace(".","");
int n = str1.toInt();
int m = str2.toInt();

if (n >= m)
{
    qDebug() << "YES";
} else if (n <= m) {
    qDebug() << "NO";
}

也许有更优化和更正确的方法来做到这一点。

你能告诉我如何将这些值转换成数字,以便可以对它们进行整体比较。谢谢。

坦率地说,我会先将它们解析为真正的整数,然后再进行转换;像这样:

const std::string s1  = str1.toStdString();
const std::string s2  = str2.toStdString();
struct { int major, minor, tag; } v0, v1;
int r1=sscanf(s1.c_str(),"%i.%i.%i",&v0.major,&v0.minor,&v0.tag);
...

然后您可以根据需要比较major/minor/etc上的版本。当然,您确实想在 sscanf 的结果上添加一些错误检查,并且可能出于安全考虑考虑 sscanf_s。

split方法得到QStringList,用std::transform转换成vector<int>,最后用lexicographical_compare.

次优的性能方面,冗长,但正确且惯用。

QVersionNumberclass就是为了解决这个问题而设计的(需要Qt 5.6+):

QVersionNumber version1 = QVersionNumber::fromString(str1);
QVersionNumber version2 = QVersionNumber::fromString(str2);

if (version1 > version2)
{
    qDebug() << "YES";
}
else
{
    qDebug() << "NO";
}