代码之家  ›  专栏  ›  技术社区  ›  Mrchacha

获取QStringList的前一个元素

  •  0
  • Mrchacha  · 技术社区  · 8 年前

    我目前正在编写一个小程序,在这个程序中,我将计算文本中某个单词被提及的次数。但我只想在前一个元素是10位数字时计算单词。 所以我要做的是检查迭代器的前一个元素是否由10位数字组成。但我不知道如何从迭代器迭代到前一个元素。

    QString input = ui->listinput->toPlainText();
    
    QStringList inputlist = input.split(QRegExp("[\s\n\r " "]+"));
    
    unsigned int boxCount(0);
    
    for(QStringList::iterator it(inputlist.begin()); it != inputlist.end(); ++it){
    
        if(!QString::compare(*it,box)) ++boxCount;
    
    }
    

    因此,我希望if语句如下所示:

    if(!QString::compare(*it,box) && *prev_it == 10 digits) ++boxCount;
    

    任何帮助都将不胜感激。谢谢

    1 回复  |  直到 8 年前
        1
  •  2
  •   Peter K    8 年前

    您可以通过执行以下操作来获取前一个迭代器:

    if (it != inputlist.begin()) {
        prev_it = it - 1
    }
    

    由于第一个元素没有前一个元素,因此必须对其进行异常处理。检查范围(如上所述)或启动您的 for 将一个元素循环到第一个元素之后(请注意“+1”):

    for (QStringList::iterator it(inputlist.begin() + 1); it != inputlist.end(); ++it) {
        ...
    }
    

    在后一种情况下,必须确保列表至少包含一个元素。

    如果您想检查数字是否为10位(假设为十进制和整数),可以尝试以下操作:

    bool ok = false;
    long num = prev_it->toLong(&ok);
    if (ok && num >= 1000000000) {
        // do something
    }
    

    注意:我使用了 long 因为我不知道你的数字范围,但它们似乎很大。