生成随机字符/数字
Generate random char/digit
我正在尝试找到生成随机数字/字符数组的最快方法。
char *randomGet(int num) {
srand(time(NULL));
const char ab[37] = { "0123456789ABCDEFGHIGKLMNOPQRSTUVWXYZ" };//Alphabet&Digit
char *targ = new char[num];
for (int i = 0; i < num; i++) {
strcat(targ, ab[rand() % 38]);
}
return targ;
}
到目前为止,我已经想出了这个,但它不起作用(char 类型的参数与 const char * 类型的参数不兼容(。 帮助我找到解决问题的最佳方法。泰。
strcat()
将char*
作为输入,但您却给它一个char
,因此编译器错误。
此外,strcat()
写入的缓冲区必须以 null 结尾,但targ
缓冲区最初不是以 null 结尾的,并且您无论如何都没有为最终的 null 终止符分配足够的空间。
您根本不需要使用strcat()
。由于您无论如何都在循环,只需使用循环计数器作为写入缓冲区的索引:
此外,在对rand()
的返回值进行取模时,您使用了错误的整数值。 您正在生成一个随机索引,该索引可能超出ab[]
数组的范围。
试试这个:
char *randomGet(int num)
{
srand(time(NULL));
static const char ab[] = "0123456789ABCDEFGHIGKLMNOPQRSTUVWXYZ"; //Alphabet&Digit
char *targ = new char[num+1];
for (int i = 0; i < num; ++i) {
targ[i] = ab[rand() % 36];
}
targ[num] = ' ';
return targ;
}
我会做两个更改。首先,将内部源数组设为静态:
static const char ab[] = "0123456789ABCDEFGHIGKLMNOPQRSTUVWXYZ";
请注意,此版本不指定数组大小;编译器将从初始值设定项中计算出来。
其次,传入指向目标数组的指针:
void randomGet(char* targ, int num) {
static const char ab[] = "0123456789ABCDEFGHIGKLMNOPQRSTUVWXYZ";
for (int i = 0; i < num - 1; ++i)
targ[i] = ab[rand() % (sizeof ab - 1)];
targ[num - 1] = ' ';
}
这样,调用方决定如何为字符串分配内存。
相关文章:
- 递归形成字符串中所有数字字符的中间和?
- C++ 从 std::string 中删除所有非数字字符
- 如何返回一串字母数字字符中的最大值(例如-1A003B3)?
- 有没有办法将最初作为字符串输入的数字字符数组复制到双向链表中
- 如何使用 c++ 将数字字符转换为字符串
- 从字符数组中修剪非字母数字字符的功能
- 使用find_if和isalnum在字符串中找到字母数字字符
- 循环直到整数输入在所需范围内无法处理非数字字符输入
- 确保字符串只包含字母数字字符的更好方法
- 用C++计算文本文件中的字母数字字符
- 使用cctype库搜索函数,以查找某个范围内的数字字符数
- 在读取C++行时过滤非字母数字字符
- C++ 如何从标准输入加载到最多 5 个字母数字字符的字符数组
- 如何知道小部件是否只接受数字字符
- 在 C++ STL 中,如何使用 regex_replace 从 std::string 中删除非数字字符
- i18n 去除非字母数字字符的友好方式
- 将字符数组拆分为字母数字字符和非字母数字字符
- 将多数字字符数转换为整数
- 在检测字符串是否包含数字字符时,这有什么问题
- 如何检测QString是否由所有数字字符组成