c++ - 随机字符串问题,错误:未捕获“变量”
问题描述
我正在尝试根据给定的字母生成随机字符串。如果我在字符串 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;
}
解决方案
您的代码可以这样修复:
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;
}
推荐阅读
- python - 枢轴列但继续在 Pandas 的新列中排序?
- python - 加载模型并计算预测的准确性
- c++ - proto2 中的字段掩码
- java - 如何在 Java 进程终止时保存 JProfiler 分析
- mongodb - Mongodb:使用数组查询和数组
- c# - 来自 Process Start 的 C# headless chrome 不起作用
- javascript - 使用 JSON.parse & JSON.stringify 克隆 JS 数组后,为什么数组的“未定义”值转换为“空”?
- javascript - 如何在 React 中使用 useRef 获取准确的 DOM 元素
- javascript - 在 redux 中使用 reselect 添加选择器
- python - 在 Python 环境中使用浏览器打开文件夹中的所有 html 文件