1

我正在尝试反转 a 中的单词QStringList。以下是到目前为止的代码,但我不断收到“索引超出范围”错误。从错误看来,我正在尝试使用超出范围的数据,但无法找出我的问题。

QString reversed;
QStringList reversedlist;
QStringlist list = input.split(" ");

for (int i=0;i<list.length(); ++1)
  reversedlist[i] = list[list.length() -1 -i];

reversed = reversedlist.join(" ");`

谢谢

4

3 回答 3

2

正如@ThorngardSO 所指出的,reversedlist最初是空的,您正在尝试访问循环代码中的无效索引。您应该使用以下函数之一将值添加到列表中:

  • STL兼容函数(在列表末尾push_back()插入值)
  • STL兼容函数(在列表开头push_front()插入值)
  • Qt 函数append()(Qt 的替代品push_back
  • Qt 函数prepend()(Qt 的替代品push_front

如您所见,在列表的开头prepend()插入元素,这就是为什么它使列表的反转非常简单:

for (int i = 0; i < list.length(); ++i) {
    reversedlist.prepend(list[i]);
}

另外,请注意,您的循环中有一个错字:它应该是++i而不是++1.

于 2016-02-06T13:55:02.340 回答
1

您的 reversedList 最初是空的。您必须实际附加项目,如下所示:

reversedlist.push_back (list[list.length () - 1 - i]);

自然,尝试访问不存在的项目 viareversedList[i]不起作用并引发 index-out-out-range 错误。

于 2016-02-06T12:01:30.490 回答
0

您的索引超出范围,因为 QStringList reversedlist 内没有刺痛。因此,当您的代码到达 reversedlist[0] 行时,它会抛出“索引超出范围”错误。您可以使用 [0] 读取值并且无法分配。如果要将值分配给 QStringList 的特定索引。

QString reversed;
    QStringList reversedlist;

    QString input="123 456 789 000";
    QStringList list = input.split(" ");

    for (int i=0;i<list.length(); ++i){
      //value to particular index
      reversedlist.insert(i,list[list.length() -1 -i]);
    }

    reversed = reversedlist.join(" ");

    qDebug() << reversed;
于 2016-02-06T12:10:31.203 回答