View Full Version : مشکل با مرتب سازی
nima mansouri
سه شنبه 11 تیر 1392, 23:22 عصر
سلام مب با تابع sort مشکل دارم مثلا کد زیر برای من به اشتباه مرتب سازی می کند
QTextEdit e;
QStringList list ;
QString s = "ا ب پ ت ث ج چ ح خ د ذ ر ز ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن و ه ی";
list = s.split(" ");
list.sort();
e.setText(list.join("\n"));
e.show();
http://upload7.ir/images/53986890360387742693.png
حامد مصافی
چهارشنبه 12 تیر 1392, 14:00 عصر
bool cmp(const QString &l, const QString &r)
{
QString s = QString::fromUtf8("ا ب پ ت ث ج چ ح خ د ذ ر ز ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن و ه ی");
if(l == r)
return 0;
else
return s.indexOf(l) < s.indexOf(r);
}
int main(int argc, char *argv[])
{
QTextEdit e;
QStringList list ;
QString s = QString::fromUtf8("ا ب پ ت ث ج چ ح خ د ذ ر ز ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن و ه ی");
list = s.split(" ");
qSort(list.begin(), list.end(), cmp);
e.setText(list.join("\n"));
e.show();
}
nima mansouri
چهارشنبه 12 تیر 1392, 20:28 عصر
سلام ممنون از وقتی که گذاشتی ولی کدت برای جمله کار نمی کند مثلا
QTextEdit e;
QStringList list ;
list<<QString::fromUtf8("علی");
list<<QString::fromUtf8("ولی");
list<<QString::fromUtf8("امین");
list<<QString::fromUtf8("یهیی");
list<<QString::fromUtf8("هاشم");
qSort(list.begin(), list.end(), cmp);
e.setText(list.join("\n"));
e.show();
حامد مصافی
چهارشنبه 12 تیر 1392, 20:45 عصر
نبایدم کار کنه. اگه به تابع cmp توجه کنی فقط یک حرف رو بررسی میکنه. میتونی این روش رو برای چند حرف تعمیم بدی
int cmp1ch(const QString &l, const QString &r)
{
QString s = QString::fromUtf8("ابپتثجچحخدذرزژسشصضطظعغفقک گلمنوهی");
if(l == r)
return 0;
else
return s.indexOf(l) < s.indexOf(r) ? 1 : -1;
}
bool cmp(const QString &l, const QString &r)
{
for(int i = 0; i < qMin(l.count(), r.count()); i++){
int c = cmp1ch(l[i], r[i]);
if(c)
return c == 1;
}
return l.count() < r.count();
}
int main(int argc, char *argv[])
{
QTextEdit e;
QStringList list ;
list<<QString::fromUtf8("علی");
list<<QString::fromUtf8("محمدرضا");
list<<QString::fromUtf8("ولی");
list<<QString::fromUtf8("امین");
list<<QString::fromUtf8("محمد");
list<<QString::fromUtf8("یحیی");
list<<QString::fromUtf8("هاشم");
qSort(list.begin(), list.end(), cmp);
e.setText(list.join("\n"));
e.show();
}
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.