2014-10-11 121 views
0

我想知道如何比較2 QStringList和以下述方式顯示結果:如何比較2 QStringList並顯示結果?

我有2 QPlainTextEdit甲乙

  • 在AI有,例如,10行6個號碼的每行;
  • 在B中,例如,每行有100行,每行6個數字;

我想要做的是:取B中的每一行並與A中的所有行進行比較。如果在一個行比較中,所有6個都等於int n6(例如)將會添加1.如果只有5個相等,則int n5將加1,依此類推。

我試了幾件事,但沒有一個工作。如果你能給我一些提示,我會很感激。

回答

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 
     } 
    } 
} 
+0

感謝您的答案,但我忘了說,這將是一個彩票查詢應用程序。你的方法有效,但當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

+0

沒關係,我明白了。那麼我怎樣才能比較所有的字符串? – Rafaelpsmed 2014-10-11 21:47:37

+0

@Rafaelpsmed,我編輯了我的答案,添加了比較的基本構造。但是,你有數字> 9,字符串比較不是最好的主意。你應該首先爲每一行創建一個'QStringList',使用http://qt-project.org/doc/qt-5/qstring.html#split – 2014-10-12 08:06:57

2

使用QSetsubtract()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"; 
} 
+0

謝謝你的答案,但我如何計算這種差異? – Rafaelpsmed 2014-10-11 21:38:32

+0

@Rafaelpsmed您在QSet中的差異,所以只需調用count()方法進行減法。它會返回QSet中元素的數量,但它是您正在查找的數字。 – Chernobyl 2014-10-12 04:51:32

+0

感謝它的工作。但我如何將QPlainText B中的第一行與QPlainText A中的所有行進行比較?然後比較B中的第二行和A中的所有行等等? – Rafaelpsmed 2014-10-14 01:31:50