16,211
社区成员
发帖
与我相关
我的任务
分享
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);
}
#include <QtGui>
bool moreThan(const QPair<QString, int> &pair1, const QPair<QString, int> &pair2)
{
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>("好", 1));
list.append(QPair<QString, int>("不", 5));
list.append(QPair<QString, int>("是", 1));
list.append(QPair<QString, int>("的", 2));
list.append(QPair<QString, int>("人", 1));
list.append(QPair<QString, int>("总", 3));
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;
}
qStableSort(list.begin(), list.end(), moreThan);
qDebug("after sort: ");
QListIterator<QPair<QString, int> > iter2(list);
while (iter2.hasNext())
{
pair = iter2.next();
qDebug() << pair.first << " " << pair.second;
}
return a.exec();
}
下面是打印:
before sort:
"好" 1
"不" 5
"是" 1
"的" 2
"人" 1
"总" 3
"一" 1
after sort:
"不" 5
"总" 3
"的" 2
"好" 1
"是" 1
"人" 1
"一" 1 #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
你是怎么给"好"和"是"排序的?
bool lessThan(const QPair &pair1, const QPair &pair2)
{
if (pair1.second == pair2.second)
{
return (pair1.first < pair.first);
}
return pair1.second < pair2.second;
}
void test::zpSlot(){
QString str=ui->textEdit->toPlainText();
QList<QPair<QString,int> > list;
//统计字频
for(int i=0;i<str.length();i++){
int s=str.count(str[i]);
list.append(QPair(str[i],s));
qDebug()<<str[i]<<s;
}
qDebug()<<"-------"<<endl;
// 从map中获取每一个键
foreach(QCharRef str,map.keys())
qDebug() << str << " : " << map.value(str);
qSort(list.begin(), list.end(), lessThan);
}
void test::zpSlot(){
QString str=ui->textEdit->toPlainText();
QMap<QCharRef,int> map;
//统计字频
for(int i=0;i<str.length();i++){
int s=str.count(str[i]);
map.insert(str[i],s);
qDebug()<<str[i]<<s;
}
qDebug()<<"-------"<<endl;
// 从map中获取每一个键
foreach(QCharRef str,map.keys())
qDebug() << str << " : " << map.value(str);
}
大神在吗?我改了下,
结果:
'一' : 1
'不' : 5
'人' : 1
'好' : 1
'总' : 3
'是' : 1
'的' : 2
不按键值排序。
不知道怎么回事。能帮忙看看问题出在哪里吗。
多谢!