我想知道如何比较2 QStringList
和以下述方式显示结果:如何比较2 QStringList并显示结果?
我有2 QPlainTextEdit
甲乙
- 在AI有,例如,10行6个号码的每行;
- 在B中,例如,每行有100行,每行6个数字;
我想要做的是:取B中的每一行并与A中的所有行进行比较。如果在一个行比较中,所有6个都等于int n6(例如)将会添加1.如果只有5个相等,则int n5将加1,依此类推。
我试了几件事,但没有一个工作。如果你能给我一些提示,我会很感激。
我想知道如何比较2 QStringList
和以下述方式显示结果:如何比较2 QStringList并显示结果?
我有2 QPlainTextEdit
甲乙
我想要做的是:取B中的每一行并与A中的所有行进行比较。如果在一个行比较中,所有6个都等于int n6(例如)将会添加1.如果只有5个相等,则int n5将加1,依此类推。
我试了几件事,但没有一个工作。如果你能给我一些提示,我会很感激。
开始通过每串
int matchingDigits(QString str1, QString str2)
{
int matches = 0;
int minSize = str1.size() < str2.size() ? str1.size() : srt2.size();
for (int pos = 0; pos < minSize; ++pos)
{
if (str1.at(pos) == str2.at(pos) ++matches;
}
return matches;
}
计算匹配的位数现在相互比较(迭代都StringLists)所有的一个字符串,如果matchingDigits()
东西> 0
,那么你可以增加你的结果计数器。
QStringList listA;
QStringList listB;
foreach (QString a, listA)
{
foreach (QString b, listB)
{
int matches = matchingDigits(a, b);
if (matches > 0)
{
// do something fancy
}
}
}
使用QSet
和subtract()
和count()
或size()
QStringList mOldList, mNewList;
mOldList.append("1");
mOldList.append("2");
mOldList.append("3");
mOldList.append("4");
mOldList.append("5");
mOldList.append("10");
mNewList.append("1");
mNewList.append("2");
mNewList.append("3");
mNewList.append("4");
mNewList.append("5");
mNewList.append("15");
QSet<QString> subtraction = mNewList.toSet().subtract(mOldList.toSet());
QSet<QString> subtraction1 = mOldList.toSet().subtract(mNewList.toSet());
foreach (const QString &filename, subtraction)
qDebug() << " difference: "<< filename;
foreach (const QString &filename, subtraction1)
qDebug() << " difference: "<< filename;
结果:
difference: "15"
difference: "10"
例如与下一个列表:
mOldList.append("1");
mOldList.append("2");
mOldList.append("3");
mOldList.append("4");
mOldList.append("5");
mOldList.append("10");
mNewList.append("1");
mNewList.append("2");
mNewList.append("3");
mNewList.append("4");
mNewList.append("5");
mNewList.append("15");
QSet<QString> subtraction = mNewList.toSet().subtract(mOldList.toSet());
foreach (const QString &fileName, subtraction)
qDebug() << " difference: "<< fileName;
仅结果15:
difference: "15"
这意味着一个元素不相同。
mOldList.append("1");
mOldList.append("2");
mOldList.append("3");
mOldList.append("4");
mOldList.append("5");
mOldList.append("10");
mNewList.append("1");
mNewList.append("2");
mNewList.append("3");
mNewList.append("4");
mNewList.append("115");
mNewList.append("15");
两个元素是不一样的:
difference: "115"
difference: "15"
或者另一种方式:
qSort(mNewList);
qSort(mOldList);
if(mNewList == mOldList){
qDebug() << "same";
}
else{
qDebug() << "not same";
}
谢谢你的答案,但我如何计算这种差异? – Rafaelpsmed 2014-10-11 21:38:32
@Rafaelpsmed您在QSet中的差异,所以只需调用count()方法进行减法。它会返回QSet中元素的数量,但它是您正在查找的数字。 – Chernobyl 2014-10-12 04:51:32
感谢它的工作。但我如何将QPlainText B中的第一行与QPlainText A中的所有行进行比较?然后比较B中的第二行和A中的所有行等等? – Rafaelpsmed 2014-10-14 01:31:50
感谢您的答案,但我忘了说,这将是一个彩票查询应用程序。你的方法有效,但当1; 2; 3; 4; 5; 6与1; 2; 3; 4; 5; 6(因为;我猜)相同时返回11;当1; 2; 3; 4; 5; 6对23; 53; 46; 60; 13; 24。如何解决此问题? – Rafaelpsmed 2014-10-11 21:23:16
没关系,我明白了。那么我怎样才能比较所有的字符串? – Rafaelpsmed 2014-10-11 21:47:37
@Rafaelpsmed,我编辑了我的答案,添加了比较的基本构造。但是,你有数字> 9,字符串比较不是最好的主意。你应该首先为每一行创建一个'QStringList',使用http://qt-project.org/doc/qt-5/qstring.html#split – 2014-10-12 08:06:57