赞
踩
这个需求也是最近一个项目里的实际需求。测试一个数据库相关的代码。要往数据库里随机的填写一些字段。
从原理上是很容易实现。建立一个数组,存放一些字符。然后随机的从里面取一些字符凑成一个字符串。
所以这个代码没啥可说的。里面用到了 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
#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; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。