0

要求

抱歉,这听起来像是一项家庭作业,但我需要这个功能用于我在项目中实现的 dll。

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

试图

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 个随机字符串上运行它。结果并不统一。这并不奇怪,因为我的映射功能很尴尬。

我试着看伪随机数生成,有点迷路了。

4

1 回答 1

3

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

#include <string>
#include <functional>

std::hash<std::string> hasher;
iRand = hasher(strLine) % 101; // iRand will be in [0,100] range
于 2018-06-03T07:35:40.617 回答