随机字符串出现问题,错误:未捕获“变量”

时间:2019-05-27 21:07:22

标签: c++

我正在尝试根据给定的字母生成随机字符串。 如果我在字符串random_string中定义字母,那么它可以工作,但是如果我要在main中修改字母,然后将其发送给函数,则会给出错误消息:未捕获“字母”。

string random_string( size_t length, string alphabet)
{
    auto randchar = []() -> char
    {
        const char charset[] = alphabet;
        const size_t max_index = (sizeof(charset) - 1);
        return charset[ rand() % max_index ];
    };
    string str(length,0);
    generate_n( str.begin(), length, randchar );
    return str;
}

主要:

string alphabet="ABCDE";
string txt= random_string(150, alphabet);

有效的原始代码:

string random_string( size_t length)
{
    auto randchar = []() -> char
    {
        const char charset[] = "ABCDE";
        const size_t max_index = (sizeof(charset) - 1);
        return charset[ rand() % max_index ];
    };
    string str(length,0);
    generate_n( str.begin(), length, randchar );
    return str;
}

1 个答案:

答案 0 :(得分:0)

您的代码可以通过以下方式修复:

1)为避免出现“错误:未捕获'字母'”。您实际上应该将字符串alphabet捕获到lambda函数中:auto randchar = [&alphabet]() -> char { ... }。有关Lambda和捕获here;

的更多信息

2)您不需要辅助缓冲区charset。如果您已经有对字符串的引用,只需从中获取随机符号即可;

3)另外,我在字符串引用中添加了const限定符,因为它在逻辑上是恒定的。

此处的固定变体是:

string random_string( size_t length, const string &alphabet)
{
  auto randchar = [&alphabet]() -> char
    {
        const size_t max_index = (alphabet.size() - 1);
        return alphabet[ rand() % max_index ];
    };
    string str(length,0);
    generate_n( str.begin(), length, randchar );
    return str;
}