Qt数字与字母混合的字符串自增

这篇博客介绍了如何在Qt环境中处理数字和字母混合的字符串自增操作。内容涉及使用C++语言,重点在于字符串处理的技巧和方法。
摘要由CSDN通过智能技术生成

Qt实现数字和字母混合的字符串自增

有时候想要一串字母和数字混合的字符串能够以1或者n的增量不断增加,下面代码可以实现此功能,如果有bug,欢迎指正:
#define isNum(str)                  QRegExp(QString("[0-9]{%1}"   ).arg(str.size())).exactMatch(str)
#define isLower(str)                QRegExp(QString("[a-z]{%1}"   ).arg(str.size())).exactMatch(str)
#define isUpper(str)                QRegExp(QString("[A-Z]{%1}"   ).arg(str.size())).exactMatch(str)
#define isNumAndLower(str)          QRegExp(QString("[0-9a-z]{%1}").arg(str.size())).exactMatch(str)
#define isNumAndUpper(str)          QRegExp(QString("[0-9A-Z]{%1}").arg(str.size())).exactMatch(str)
#define isLowerAndUpper(str)        QRegExp(QString("[A-Za-z]{%1}").arg(str.size())).exactMatch(str)
#define isNumAndLowerAndUpper(str)  QRegExp(QString("[0-9A-Za-z]{%1}").arg(str.size())).exactMatch(str)

enum IncreasingSymbol {
   
    NoSymbol = 0,           //没有自增字符
    Number = 1,             //数字字符
    LowerChar = 2,          //小写字母
    UpperChar = 3,          //大写字母
    NumAndLowerChar = 4,    //数+小
    NumAndUpperChar = 5,    //数+大
    LowerAndUpperChar = 6,  //小+大
    NumAndLowAndUpChar = 7, //数+小+大
};


/// \brief increment    输入混合字符串,返回自增后的字符串
/// \param sBegin       起始字符串如: ABCDabcd1234
/// \param sEnd         结束字符串如: ABCDabce1234
/// \param sRange       自增包含符号:
///                     数字:012346789
///                     小写字母:abcdefghijklmnopqrstuvwxyz
///                     大写字母:ABCDEFGHIJKLMNOPQRSTUVWXYZ
///                     数字+大写:0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
///                     数字+小写:0123456789abcdefghijklmnopqrstuvwxyz
///                     数字+小写+大写:0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
/// \param iIncrease    自增量(1~9)
/// \param iType        自增类型见枚举 IncreasingSymbol
/// \return

QString increment(QString sBegin, QString sEnd, QString sRange, int iIncrease, int iType) {
   
    //1. 判断各数据是否合法
    if (sBegin.isEmpty() || sEnd.isEmpty() || sRange.isEmpty()) return "";
    if (sBegin >= sEnd) return sEnd;

    //2. 获取数字/小写字母/大写字母 的开始字符和结束字符
    char beginNum, beginLower, beginUpper, endNum, endLower, endUpper;
    findBeginAndEndChar(sRange, beginNum, beginLower, beginUpper, endNum, endLower, endUpper);

    //3. 进行累加操作
    int iSize = sBegin.size();
    while (iSize > 0) {
   
        //3.1 获取最后一个字符进行累加, (目前只做一位的累加)
        char last = sBegin[iSize - 1].toLatin1();
        last += ((iSize == sBegin.size()) ? iIncrease : 1);

        switch (iType) {
   
        //3.2 只有数字的累加
        case Number: {
   
            //3.2.1 查找在递增范围符号中是否存在该字符,不存在则继续往后找
            while(last >= beginNum && last < endNum && !sRange.contains(last)) {
   
                last++;
            }

            //3.2.2 判断最后一位累加后是否大于数字结束符号,如果大于,本位取差值,并且进位
            //      如果不大于,则直接返回累加结果
            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值