含有字母数字的字符串累计加一

含有字母数字的字符串累计加一(eg:s001->s002)

写了一个函数 针对字母部分和数字部分拆分,然后对数字部分进行加一,为什么不直接bar.toInt();因为如果字符串够长,超出int的范围,就会很难受;
所以将字符串拆分为字符数组,再依次判断+1,满十归0,前一位加1,如果是第一位满十,需要新加一位。

代码内都有注释,如下:

/**
 * @brief MainWindow::barcodeAdd 条码累加
 * @param bar                    需要被计算的字符串
 * @return
 */
QString MainWindow::barcodeAdd(QString bar)
{
    int i;
    char barcodeNum[30];
    QString newBarcode , barcode1 , barcode2;   //1新的条码内容  2从后往前 第一个不是整数的字符  3最后的整数字符
    QByteArray barcodeArr = bar.toLocal8Bit();
    QByteArray barcodeArr2;
    for(i = barcodeArr.size()-1;i>=0;i--){
        if(barcodeArr[i] < '0' || barcodeArr[i]> '9'){
            barcode1 = bar.mid(0,i+1);   //下标0 开始往后截取i+1长度的数据
            barcode2 = bar.mid(i+1);
            barcodeArr2 = barcode2.toLocal8Bit();
            break;   //跳出循环
        }
    }
    for(i = barcodeArr2.size()-1;i>=0;i--){

        //第一次进来 是最后一位+1
        if(i == barcodeArr2.size()-1){
            barcodeArr2[i] = barcodeArr2[i]+1;
            if(barcodeArr2[i]>'9'){      //加一后如果大于9 重新赋值0 并且前一位+1
                barcodeArr2[i] = '0';
                barcodeArr2[i-1] = barcodeArr2[i-1]+1;
            }
        }else{//不是最后一位 并且本次的值大于9 证明前一位满十进1
            if(barcodeArr2[i]>'9'){
                barcodeArr2[i] = '0';
                //如果最低位已经大于9要加1  需要 最低位新加一位 并且赋值0
                if(i != 0){
                    barcodeArr2[i-1]= barcodeArr2[i-1]+1;
                }else{
                    barcodeArr2.insert(0,'1');
                }
            }
        }
    }
    memcpy(barcodeNum,barcodeArr2.data(),barcodeArr2.size()+1);//加1是为了最后的终结符,否则转换回来的时候不知道什么时候截止
    //新的条码内容  非纯整数部分+纯整数自增后的部分
    newBarcode =barcode1 + QString::fromLocal8Bit(barcodeNum);
    return newBarcode;
}

谢谢观看~~~ 一起学习:L_taxy@163.com

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光顶术士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值