如何比较2 QStringList并显示结果?

时间:2014-10-11 18:44:53

标签: c++ qt

我想知道如何比较2 QStringList并以下列方式显示结果:

我有2 QPlainTextEdit A和B

  • 例如,在A中我有10行,每行6个数字;
  • 例如,在B i中,每行有100行6个数字;

我想要做的是:取B中的每一行并与A中的所有行进行比较。如果在一行行比较中,所有6等于int n6(例如)将添加1.如果只有5是相等的,int n5将加1,依此类推。

我尝试了一些事情,但没有一个能奏效。如果你能对此有所了解,我将不胜感激。

2 个答案:

答案 0 :(得分: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";
}

答案 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
        } 
    }
}