Qt工作笔记-QString中Split与section效率实践

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq78442761/article/details/81909152

看了大佬的代码,发现他们都喜欢用section,对spilt感觉,他们不太喜欢用!!

下面对这两个函数进行简单的分析

split在官方的说明如下:

并且在最后,还给出了这个:

说名section与split可以实现某种相同的功能!

来看下section的函数:

可以知道这个函数比较复杂,他可以用1行代码,实现split 几行代码的功能;并且还提供了一个flags。

这里给出他们变量xxxxx,xxxxxxxx,xxxxxxxxx....这种用逗号分割的字符串,

看看效【一共有10086条这样的数据】:

首先是Split函数:

效率如下【部分电脑应该不同,本人笔记本i5 4代的,比较辣鸡】:

,,然后是section函数:

效率如下:

总结下:

1.当简单对字符串处理的时候优先考虑split函数,当要实现复制的就用section函数;

2.section比split高级,因为最后一个参数是flag,这个参数看着就让人兴奋!

源码如下:

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

protected slots:
    void splitBtnClicked();
    void sectionBtnClicked();

private:
    Ui::Widget *ui;
    QString m_str;
    int m_strCount;
};

#endif // WIDGET_H

main.cpp

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QMessageBox>
#include <ctime>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    this->setWindowTitle("CSDN IT1995");
    connect(ui->splitPushButton,SIGNAL(clicked(bool)),this,SLOT(splitBtnClicked()));
    connect(ui->sectionPushButton,SIGNAL(clicked(bool)),this,SLOT(sectionBtnClicked()));

    m_str="11111111,22222222,33333333";
    for(int i=0;i<10083;i++){
        m_str.append(",xxxxxxxxxxx");
    }
    m_strCount=m_str.split(",").size();
}

Widget::~Widget()
{
    delete ui;
}

void Widget::splitBtnClicked()
{
    clock_t start,finish;
    double totalTime;

    //using "qDebug()" to simulate operation
    start=clock();
    QStringList list=m_str.split(",");
    for(int i=0;i<m_strCount;i++){
        qDebug()<<list[i];
    }
    finish=clock();
    totalTime=(double)(finish-start)/CLOCKS_PER_SEC;
    QMessageBox::information(this,"information","using split() takes "+QString::number(totalTime,'f',6)+" second!");
}

void Widget::sectionBtnClicked()
{
    clock_t start,finish;
    double totalTime;

    //using "qDebug()" to simulate operation
    start=clock();
    for(int i=0;i<m_strCount;i++){
        qDebug()<<m_str.section(",",i,i);
    }
    finish=clock();
    totalTime=(double)(finish-start)/CLOCKS_PER_SEC;
    QMessageBox::information(this,"information","using split() takes "+QString::number(totalTime,'f',6)+" second!");
}

猜你喜欢

转载自blog.csdn.net/qq78442761/article/details/81909152