首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >随机字符串问题,错误:未捕获'variable‘

随机字符串问题,错误:未捕获'variable‘
EN

Stack Overflow用户
提问于 2019-05-28 05:07:22
回答 1查看 126关注 0票数 0

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

代码语言:javascript
复制
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;
}

在main中:

代码语言:javascript
复制
string alphabet="ABCDE";
string txt= random_string(150, alphabet);

可以工作的原始代码:

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-28 06:27:13

你的代码可以这样修复:

1)为避免'Error:‘字母表’未被捕获‘实际上,您应该将字符串alphabet捕获到您的lambda函数中:auto randchar = [&alphabet]() -> char { ... }。更多关于lambda和捕获here的信息;

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

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

这里固定的变量是:

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56332466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档