QStringList多个条目和比较

时间:2018-11-07 13:04:00

标签: qt5

我正在使用QInputDialog::getText允许用户输入字符串。用户应输入任意数量的逗号分隔的整数。

然后我想检查是否重复。

为了将输入转换为整数,我尝试了以下操作:

  1. 使用QString::split(以逗号作为参数)将输入拆分为列表

  2. 遍历QStringList

    的元素
    for (int i = 1; i <= list.count(); i++)
    {
        list.at(i).toInt();
    }
    

循环导致崩溃。

该如何解决?

1 个答案:

答案 0 :(得分:0)

原因

由于列表中的元素索引从零开始,即从0开始并一直运行到count - 1,因此循环尝试访问索引为count的不存在的元素并且您的程序崩溃。

解决方案

可以更改

for (int i = 1; i <= list.count(); i++)

for (int i = 0; i < list.count(); i++)

甚至更好,请使用范围

for (const QString &substr : list)

然后在while循环中使用QList::takeFirst()QList::contains检查重复项。

示例

以下是我为您准备的一个示例:

#include <QApplication>
#include <QInputDialog>
#include <QMessageBox>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    const QString &str(QInputDialog::getText(nullptr, "Input integers",
                                             "Enter comma separated integers."
                                             " Do not use spaces."));
    QList<int> numbers;
    bool hasDuplicate = false;

    for (const QString &substr : str.split(','))
        numbers.append(substr.toInt());

    while (numbers.count() && !hasDuplicate)
        hasDuplicate = numbers.contains(numbers.takeFirst);

    QMessageBox::information(nullptr, "Result",
                             hasDuplicate ? "There is at least one duplicate"
                                          : "All numbers are unique");

    return 0;
}

结果

  • 对于示例输入

    11,22,33
    

显示此消息

Message window: All numbers are unique

  • 对于示例输入

    11,22,33,22
    

显示此消息

Message window: There is at least one duplicate