比较 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
.
次优的性能方面,冗长,但正确且惯用。
QVersionNumber
class就是为了解决这个问题而设计的(需要Qt 5.6+):
QVersionNumber version1 = QVersionNumber::fromString(str1);
QVersionNumber version2 = QVersionNumber::fromString(str2);
if (version1 > version2)
{
qDebug() << "YES";
}
else
{
qDebug() << "NO";
}
有两个值:
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
.
次优的性能方面,冗长,但正确且惯用。
QVersionNumber
class就是为了解决这个问题而设计的(需要Qt 5.6+):
QVersionNumber version1 = QVersionNumber::fromString(str1);
QVersionNumber version2 = QVersionNumber::fromString(str2);
if (version1 > version2)
{
qDebug() << "YES";
}
else
{
qDebug() << "NO";
}