我想知道如何比較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