当前位置:   article > 正文

C++ 生成随机字符串_c++ 随机字符串

c++ 随机字符串

C++ 生成随机字符串

这个需求也是最近一个项目里的实际需求。测试一个数据库相关的代码。要往数据库里随机的填写一些字段。

从原理上是很容易实现。建立一个数组,存放一些字符。然后随机的从里面取一些字符凑成一个字符串。

所以这个代码没啥可说的。里面用到了 std::random_device,std::mt19937 ,std::uniform_int_distribution 可以作为 C++ 生成随机数的一个例子。还用到了初始化列表来初始化一个 QVector , 这个也可以作为一个例子。

    #ifndef RANDOMSTRING_H
    #define RANDOMSTRING_H
    
    #include <QVector>
    #include<random>
    
    
    /**
     * @brief The RandomString class 用来生成随机字符串,可以指定随机字符串里包含哪些字符
     *   用法举例: RandomString rng;  
     *            rng.setCharSet("0123456789ABCDEF"); 
     *            QString rng.randn(10);
     */
    class RandomString
    {
    public:
        RandomString();
        RandomString(unsigned int seed);
        /**
         * @brief randn 返回一个有 N 个字符的随机字符串
         * @param N 字符串的长度
         * @return
         */
        QString randn(int N);
        void resetCharSet();
        void addChar(QChar c);
        void addCharSet(QVector<QChar> set);
        enum CHARSET {number, lowercase, uppercase};
        void addCharSet(CHARSET set);
        void addCharSet(QString set);
    private:
        QVector<QChar> m_charSet;
    
        static QVector<QChar> m_number;
        static QVector<QChar> m_lowercase;
        static QVector<QChar> m_uppercase;
    
        std::random_device randomDevice;
        std::mt19937 randomGenerator;
    };
    
    #endif // RANDOMSTRING_H
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
    #include "randomstring.h"
    #include <QtDebug>
    
    QVector<QChar> RandomString::m_number({'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'});
    QVector<QChar> RandomString::m_lowercase({'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'});
    QVector<QChar> RandomString::m_uppercase({'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'});
    
    RandomString::RandomString()
        :randomGenerator(randomDevice())
    {
    }
    
    RandomString::RandomString(unsigned int seed)
        :randomGenerator(seed)
    {
    
    }
    
    void RandomString::addCharSet(QString set)
    {
        QString::const_iterator it;
        for (it = set.constBegin(); it != set.constEnd(); ++it)
        {
              addChar(*it);
        }
    }
    
    QString RandomString::randn(int N)
    {
        int M = m_charSet.size();
        std::uniform_int_distribution<int> dist(0, M - 1);
    
        QString ret;
    
        while(N > 0)
        {
            int rand = dist(randomGenerator);
            QChar x = m_charSet.at(rand);
            //qDebug() << "rand = " << rand << ", x = " << x;
            ret.append(x);
            --N;
        }
        return ret;
    }
    
    void RandomString::resetCharSet()
    {
        m_charSet.clear();
    }
    
    void RandomString::addChar(QChar c)
    {
        m_charSet.append(c);
    }
    
    void RandomString::addCharSet(QVector<QChar> set)
    {
        m_charSet.append(set);
    }
    
    void RandomString::addCharSet(CHARSET set)
    {
        switch (set)
        {
        case number:
            m_charSet.append(m_number);
            break;
        case lowercase:
            m_charSet.append(m_lowercase);
            break;
        case uppercase:
            m_charSet.append(m_uppercase);
            break;
        default:
            break;
        }
    }
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/840160
推荐阅读
相关标签
  

闽ICP备14008679号