当前位置: 代码迷 >> QT开发 >> 新手求教 文本处理有关问题
  详细解决方案

新手求教 文本处理有关问题

热度:224   发布时间:2016-04-25 02:53:38.0
新手求教 文本处理问题
简单的说就是对textEdit中的文字统计字频,就是出现的次数,然后从大到小排序。
我只会统计次数,排序部分没思路,也只会单纯的对数字大小排序。

void Test::zpSlot(){



    QString str=ui->textEdit->toPlainText();
    QString str2;
    QString str3;


    //统计字频
    for(int i=0;i<str.length();i++){
         int s=str.count(str[i]);
         str2.append(str[i]+QString::number(s)+"\n");


    }



    QStringList list = str2.split("\n"); 
    //删除重复行
    for(int i=0;i<list.count();i++){

        if(!str3.contains(list[i])){
            str3+=list[i];
            str3+='\n';

        }
    }


    ui->textEdit->setPlainText(str3);
}



以上代码执行后,
比如“的的好是人总总总一不不不不不”
处理后变成了:
的2
好1
是1
人1
总3
一1
不5

而我要的结果:
不5
总3
的2
好1
是1
人1
一1

求大神们提供下排序部分的代码。感谢!

只有40积分了,怎么积分越用越少。。。。。
------解决思路----------------------
引用:
Quote: 引用:

你用map存就是了 key用QChar value存次数  遍历结果就行了 map默认就按key的顺序存的


[code=c]
void test::zpSlot(){

不好意思 我理解错了 我以为你是要按 '一‘ '不' 等等按字典顺序排序  现在看清楚了你是按出现次数的多少排序  那你可以对map的values在进行一次排序就行了

------解决思路----------------------
抱歉,好久没来了,下面是代码:
#include <QtGui>

bool moreThan(const QPair<QString, int> &pair1, const QPair<QString, int> &pair2)
{
    if (pair1.second == pair2.second)
    {
        return (pair1.first > pair2.first);
    }
    return pair1.second > pair2.second;
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("SYSTEM"));

    QList<QPair<QString,int> > list;
    list.append(QPair<QString, int>("不", 5));
    list.append(QPair<QString, int>("的", 2));
    list.append(QPair<QString, int>("总", 3));
    list.append(QPair<QString, int>("好", 1));
    list.append(QPair<QString, int>("是", 1));
    list.append(QPair<QString, int>("人", 1));
    list.append(QPair<QString, int>("一", 1));

    qDebug("before sort: ");
    QListIterator<QPair<QString, int> > iter(list);
    QPair<QString, int> pair;
    while (iter.hasNext())
    {
        pair = iter.next();
        qDebug() << pair.first << " " << pair.second;
    }

    qSort(list.begin(), list.end(), moreThan);

    qDebug("after sort: ");
    iter.toFront();
    while (iter.hasNext())
    {
        pair = iter.next();
        qDebug() << pair.first << " " << pair.second;
    }

    return a.exec();
}

这是打印的结果:
before sort: 
"不"   5 
"的"   2 
"总"   3 
"好"   1 
"是"   1 
"人"   1 
"一"   1 
after sort: 
"不"   5 
"的"   2 
"总"   3 
"好"   1 
"是"   1 
"人"   1 
"一"   1 
你是怎么给"好"和"是"排序的?