【问题标题】:What is wrong in this random string printing code?这个随机字符串打印代码有什么问题?
【发布时间】:2020-01-16 08:14:07
【问题描述】:

我正在尝试将 X(x = 用户输入)数字打印到字符串数组(Alpha)的行中,如果该行中有“A”,它应该在该行中打印一些内容(字符串或随机数),例如“这条线有 "A" " 。我无法弄清楚我的代码有什么问题,就像代码中的这一行无法正常工作: (Alpha[dist(gen)] == Alpha[0])

它正在打印出 ("This line has "A" ) 在有其他字符串 Alphabets (S,PC etc) 的行中

#include <climits>
#include <ctime>
#include <fstream>
#include <iostream>
#include <random>
#include <string>

using namespace std;

int main() {
    int num;
    const int SIZE = 6;

    cout << "How many iterations: ";
    cin >> num;
    string Aplha[SIZE] = {"A", "D", "P", "E", "C", "S"};

    random_device randNum;
    mt19937 gen(randNum());
    uniform_int_distribution<> dist(0, 5);
    uniform_int_distribution<> distRange(INT_MIN, INT_MAX);

    for(int i = 0; i < num; i++) {
        cout << Alpha[dist(gen)];
        if(Alpha[dist(gen)] == Alpha[0]) {
            cout << " this line has A " << distRange(gen);
        }
        cout << endl;
    }

    return 0;
}

结果应该是……

如果一行有“A”那么:

A this line has A 123231315
D
P
D
S
A this line has A 845421541
C

我得到的结果是这样的......

How many iterations: 10
S
S this line has A 1950029843
S
C this line has A -145672138
A
C
D
C
E
S

【问题讨论】:

  • 请提供预期的输出和您得到的输出,以便更轻松地提供帮助。不清楚是什么(在我的书中)。
  • dist(gen) 在你的循环中被使用了两次,这是一个做什么的函数?
  • @TedLyngmo hi ted,我刚刚编辑了我的原始帖子,请看最后一项,这就是我得到的结果..
  • @Areeb 太棒了!好多了

标签: c++ string random


【解决方案1】:

您打印的Alpha[dist(gen)] 与您对照Alpha[0] 检查的Alpha[dist(gen)] 不同。每次调用dist(gen) 都会产生一个不同的随机数。

【讨论】:

  • 是的,这在我看来也是如此,虽然不是 100% 确定 dist() 在做什么
  • @DanielAaron 它正在做the documentation 所说的事情。
  • 由于Alpha[dist(gen)] 在同一个{}中,所以我相信它应该具有相同的值,直到循环的下一次旋转,所以当我调用 == 运算符来检查它的值时应该与刚刚打印的相同....如果我错了请纠正我
  • 你错了。认为自己纠正了。添加这样一行:cout &lt;&lt; dist(gen) &lt;&lt; dist(gen); - 可能很有启发性。
  • @IgorTandetnik 是的,我刚刚检查过你是对的,你能告诉我解决方案吗?
【解决方案2】:

错误在接下来的两行。每次调用 dist(gen) 时都会得到不同的索引。

cout << Alpha[dist(gen)];   
if (Alpha[dist(gen)] == Alpha[0])

我想,应该像下面这样。

const size_t j = dist(gen);
cout << Alpha[j];   
if (Alpha[j] == Alpha[0])

【讨论】:

  • 我试过了,但它不再是随机数了,你的代码正在制作 dist(gen) 常量,它在输出中给了我一个字符串 Alphabet。
  • const size_t j = dist(gen); 必须在循环内,就像在答案中一样。
猜你喜欢
  • 2014-03-26
  • 1970-01-01
  • 2023-03-17
  • 2014-04-08
  • 2012-10-31
  • 1970-01-01
  • 2015-12-04
  • 1970-01-01
相关资源
最近更新 更多