将字符串映射到范围内的随机数的算法[0,100]

时间:2018-06-03 07:29:44

标签: c++ random c++14 uniform-distribution

要求

对不起,这听起来像是家庭作业,但我需要这个功能才能在我们的项目中实施。

  1. 我有一个字符串数组。
  2. 每个字符串的长度为16个随机字符[0-9a-z]
  3. 我想将每个字符串映射到范围[0,100]
  4. 中的随机数
  5. 字符串' X'将始终映射到数字' Y'
  6. 尝试

    for (string strLine; std::getline(filein, strLine);)
    {
        int iSum = 0;
        for (const auto& c : strLine)
            iSum += static_cast<int>(c);
    
        int iRand = iSum % 101;
    
        using namespace std;;
    
        fileout << strLine << "\t" << iSum << "\t" << iRand << endl;
    }
    

    问题

    我在1000个随机字符串上运行它。结果不统一。这并不奇怪,因为我的映射功能令人尴尬。

    我试着看Pseudo-random number generation,有点迷路。

1 个答案:

答案 0 :(得分:3)

为什么不使用内置的std::hash

#include <string>
#include <functional>

std::hash<std::string> hasher;
iRand = hasher(strLine) % 101; // iRand will be in [0,100] range