QT_字母+数字(Ex:R1或R1.2)排序比较的算法函数

//排序
QStringList savedata::Bubble_Bort(QStringList list)
{
QStringList SortList;
int n = list.size();

for(int i=0;i<n;i++) {
    QString Sort = "R99999.9";
    int In = -1;
    for(int j=0;j<list.size();++j) {
        bool compare = Str_Double1(Sort, list.at(j));

        //if(rn < Sort)
        if (compare)
        {
            //Sort = rn;
            Sort = list.at(j);
            In = j;
        }
    }
    SortList.append(list.at(In));
    list.removeAt(In);
}
return SortList;

}

//str转为double后比较大小,ex:R1.2
bool savedata::Str_Double1(QString str1, QString str2)
{
bool ok = true;
int f1 = str1.split(“R”).at(1).split(“.”).at(0).toUInt(&ok, 10);//小数点前面的值
int f2 = str2.split(“R”).at(1).split(“.”).at(0).toUInt(&ok, 10);//小数点前面的值
QString b1 = str1.split(“R”).at(1).split(“.”).last();//小数点后面的值
QString b2 = str2.split(“R”).at(1).split(“.”).last();//小数点后面的值
if (f1 > f2) {//小数点前面的数字没有字母可以直接比较,//如果f1大,就返回str1
return true;
} else if (f1 == f2) {//如果小数点前面的相等,就比较小数点后面的字符大小
if (b1.contains(QRegExp(“^\d+KaTeX parse error: Got function '\\' with no arguments as superscript at position 76: …ains(QRegExp("^\̲\̲d+”))) {//如果b2是纯数字
if (b1.toUInt(&ok, 10) > b2.toUInt(&ok, 10)) {//转为数字直接比较
return true;
} else {
return false;
}
} else {//如果b2不是纯数字
if (b1.toUInt(&ok, 10) > b2.left(b2.length()-1).toUInt(&ok, 10)) {//将b2去除字母直接比较(因为字母定是最后一位)
return true;
} else if (b1.toUInt(&ok, 10) == b2.left(b2.length()-1).toUInt(&ok, 10)) {//去除字母后相等,说明带字母的大
return false;
} else {
return false;
}
}
} else {//如果b1不是纯数字
if (b2.contains(QRegExp(“^\d+$”))) {//如果b2是纯数字
if (b1.left(b1.length()-1).toUInt(&ok, 10) > b2.toUInt(&ok, 10)) {//将b1去除字母转为数字直接比较(因为字母定是最后一位)
return true;
} else if (b1.left(b1.length()-1).toUInt(&ok, 10) == b2.toUInt(&ok, 10)) {//去除字母后相等说明带字母的大
return true;
} else {
return false;
}
} else {//如果b2不是纯数字
if (b1.left(b1.length()-1).toUInt(&ok, 10) > b2.left(b2.length()-1).toUInt(&ok, 10)) {//将b1、b2都去除字母直接比较(因为字母定是最后一位)
return true;
} else if (b1.left(b1.length()-1).toUInt(&ok, 10) == b2.left(b2.length()-1).toUInt(&ok, 10)) {//b1b2都带字母时,且只有字母不同,就将字母转为int比较,
if ((int)(b1.toUtf8().at(b1.length()-1)) > (int)(b2.toUtf8().at(b2.length()-1))) {
return true;
} else {
return false;
}
} else {
return false;
}
}
}
} else {//如果f1小,就返回str2
return false;
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值