我正在尝试生成基于给定字母表的随机字符串。如果我在字符串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;
}
在main中:
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;
}
发布于 2019-05-28 06:27:13
你的代码可以这样修复:
1)为避免'Error:‘字母表’未被捕获‘实际上,您应该将字符串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;
}
https://stackoverflow.com/questions/56332466
复制相似问题