我找不到字符串中的子串

问题描述 投票:0回答:1

我正在尝试使用

QNetworkAccessManager
解析来自站点的数据。为此,我将站点数据写入
QString
,但是当我使用
indexOf
进行子字符串搜索时,结果不正确:一个值为 -1。请告诉我,这里有什么问题?

void MainWindow::on_pushButton_clicked()
{
     pBar = new QProgressBar;
     pBar->setMaximum(0); // максимум
     pBar->setMinimum(0);
     pBar->show();

     QNetworkRequest request;
     QUrl url(tr("https://auto.ru/tver/cars/all/? utm_source=yandex_direct&utm_medium=direct.brand&utm_campaign=460_hand_desktop_used_brand_search_Tver_none_82222146&utm_content=cid%3A82222146%7Cgid%3A5114476686%7Caid%3A13330832990%7Cph%3A42898716904%7Cpt%3Apremium%7Cpn%3A1%7Csrc%3Anone%7Cst%3Asearch%7Ccgcid%3A0%7Cdt%3Adesktop&utm_term=auto+ru&adjust_t=cl4qttt_nsw4it6&adjust_campaign=82222146&adjust_adgroup=5114476686&tracker_limit=10000&adjust_ya_click_id=1049526807999603789&_openstat=ZGlyZWN0LnlhbmRleC5ydTs4MjIyMjE0NjsxMzMzMDgzMjk5MDt5YW5kZXgucnU6cHJlbWl1bQ&yclid=639777327900000255"));

     request.setUrl(url);

     this->manager->get(request);

     connect(manager, SIGNAL(finished(QNetworkReply*)), this, 
     SLOT(replyFinished(QNetworkReply*)));
  }

  void MainWindow::replyFinished(QNetworkReply* reply)
  {
      if (reply->error() == QNetworkReply::NoError)
      {
          QByteArray content= reply->readAll();
          QTextCodec *codec = QTextCodec::codecForName("utf8");
          QString page = codec->toUnicode(content.data());
          int startStrPos = page.indexOf("<div class=\"ListingCars 
                                     ListingCars_outputType_list\">");
          int endStrPos   = page.lastIndexOf("<div class=\"ListingCarsPagination\">");
  
           
          // startStrPos = -1
          qDebug() << startStrPos << endStrPos;

          QString ctn = page.mid(startStrPos, endStrPos - startStrPos);
          ui->textEdit->setPlainText(ctn);
     }
     reply->deleteLater();
     pBar->close();
  }
c++ qt qstring qnetworkaccessmanager
1个回答
0
投票

您搜索的字符串跨越 2 个源代码行,这是不正确的。您应该使用单行:

      int startStrPos = page.indexOf("<div class=\"ListingCars ListingCars_outputType_list\">");

或者您应该使用字符串将字符串分成两部分以提高可读性:

      int startStrPos = page.indexOf("<div class=\"ListingCars" 
                                     " ListingCars_outputType_list\">");
© www.soinside.com 2019 - 2024. All rights reserved.