首页 > 解决方案 > 随机字符串问题,错误:未捕获“变量”

问题描述

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

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;
}

标签: c++

解决方案


您的代码可以这样修复:

1) 为避免“错误:未捕获‘字母’。” 您实际上应该将字符串捕获alphabet到您的 lambda 函数中:auto randchar = [&alphabet]() -> char { ... }. 更多关于 lambdas 和捕获这里

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;
}

推荐阅读