含有字母数字的字符串累计加一(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