2014-10-11 787 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