【问题标题】:Create a random string or number in Qt4在 Qt4 中创建一个随机字符串或数字
【发布时间】:2011-03-15 18:31:43
【问题描述】:

是否有任何函数或类似的东西可以让我创建完全随机的字符串或数字?

【问题讨论】:

    标签: qt qt4 random


    【解决方案1】:

    使用Quuid

    #include <QUuid>
    QString randomStr = QUuid::createUuid();
    

    【讨论】:

      【解决方案2】:

      Here 是使用qrand() 的好答案。下面的解决方案使用QUuid,正如上面已经建议的那样,生成随机且唯一的ID(它们都是hex 数字):

      #include <QApplication>
      #include <QDebug>
      #include <QRegularExpression>
      #include <QUuid>
      
      int main(int argc, char *argv[])
      {
          QApplication a(argc, argv);
      
          // random hex string generator
          for (int i = 0; i < 10; i++)
          {
              QString str = QUuid::createUuid().toString();
              str.remove(QRegularExpression("{|}|-")); // if you want only hex numbers
              qDebug() << str;
          }
      
          return a.exec();
      }
      

      输出

      "479a494a852747fe90efe0dc0137d059"
      "2cd7e3b404b54fad9154e46c527c368a"
      "84e43735eacd4b8f8d733bf642476097"
      "d7e824f920874f9d8b4264212f3bd385"
      "40b1c6fa89254705801caefdab5edd96"
      "b7067852cf9d45ca89dd7af6ffdcdd23"
      "9a2e5e6b65c54bea8fb9e7e8e1676a1a"
      "981fa826073947e68adc46ddf47e311c"
      "129b0ec42aed47d78be4bfe279996990"
      "818035b0e83f401d8a56f34122ba7990"
      

      【讨论】:

        【解决方案3】:

        您可以使用qrand 创建随机数。如果需要字符串,可以将 int 转换为字符串。您还可以检查生成通用唯一标识符的QUuid 类。这些不是“完全随机的”,但它们是独一无二的。

        【讨论】:

        【解决方案4】:

        这不是在给定范围内生成随机数的好方法。 (事实上​​这对大多数生成器来说是非常非常糟糕的)

        您假设生成器的低位是均匀分布的。大多数发电机不是这种情况。在大多数生成器中,随机性发生在高位。

        通过使用除法后的余数,您实际上是在抛弃随机性。

        您应该使用乘法和除法进行缩放。不使用模运算符。 例如

        my_numbe r= start_required + ( generator_output *  range_required)/generator_maximum;
        

        如果generator_output[0, generator_maximum] 中, my_number 将在 [start_required , start_required + range_required] 中。

        【讨论】:

          【解决方案5】:

          以下示例生成大写字母从 A 到 Z 且长度 = len 的字母字符串。

          QString randString(int len)
          {
              QString str;
              str.resize(len);
              for (int s = 0; s < len ; ++s)
                  str[s] = QChar('A' + char(qrand() % ('Z' - 'A')));
          
              return str;
          }
          

          【讨论】:

            【解决方案6】:
            int number;
            int randomValue = qrand() % number;
            

            返回一个随机数randomValue 0 randomValue number。

            qrand()QtGlobal 中声明,它被许多其他 Qt 文件#included。

            int value;
            QString aString = QString::number(value);
            

            将整数转换为 QString。

            【讨论】:

              猜你喜欢
              • 2022-09-27
              • 1970-01-01
              • 1970-01-01
              • 2014-09-19
              • 2014-10-26
              • 2021-02-21
              • 1970-01-01
              • 1970-01-01
              • 2014-10-20
              相关资源
              最近更新 更多