我正在使用QInputDialog::getText
允许用户输入字符串。用户应输入任意数量的逗号分隔的整数。
然后我想检查是否重复。
为了将输入转换为整数,我尝试了以下操作:
使用QString::split
(以逗号作为参数)将输入拆分为列表
遍历QStringList
for (int i = 1; i <= list.count(); i++)
{
list.at(i).toInt();
}
循环导致崩溃。
该如何解决?
答案 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
显示此消息
对于示例输入
11,22,33,22
显示此消息