我正在尝试根据给定的字母生成随机字符串。 如果我在字符串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;
}
答案 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;
}