如何在 Matlab 中生成随机字符串?

Posted

技术标签:

【中文标题】如何在 Matlab 中生成随机字符串?【英文标题】:How can I generate a random string in Matlab? 【发布时间】:2012-02-13 15:21:08 【问题描述】:

我想创建一个随机长度和随机字符的字符串,只有 [a-z][A-Z] 和数字。有内置的吗?

提前致谢。

【问题讨论】:

【参考方案1】:

@Phonon 和@dantswain 的答案没什么可补充的,除了[a-Z],[A-Z] 的范围可以用不那么痛苦的方式生成,randi 可以用来创建整数随机值。

 symbols = ['a':'z' 'A':'Z' '0':'9'];
 MAX_ST_LENGTH = 50;
 stLength = randi(MAX_ST_LENGTH);
 nums = randi(numel(symbols),[1 stLength]);
 st = symbols (nums);

【讨论】:

[OP 没有明确要求,但对于任何关心的人:结果分布不会是统一的,因为存在对较短字符串的偏见。]【参考方案2】:

这应该可以工作

s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; %找到可供选择的随机字符数 numRands = 长度(秒); %指定要生成的随机字符串的长度 sLength = 50; %生成随机字符串 randString = s( ceil(rand(1,sLength)*numRands) )

【讨论】:

谢谢!没有长字符串有没有更好的方法来实现这一点? 小错误:你应该使用ceil而不是round,否则你可能会有索引为零,这在MATLAB中是不允许的【参考方案3】:

在我意识到你想要 [A-Z][a-z] 和 [0-9] 之前,我开始写这篇文章。为此,@Phonon 的回答很好。

作为替代方案,这将在从空格 (32) 到波浪号 (126) 的所有可读字符范围内生成随机 ASCII 字符:

length = 10;
random_string = char(floor(94*rand(1, length)) + 32);

【讨论】:

经过一些调整,我仍然发现这是一个很好的简单单行解决方案,可以满足简单的需求。我正在使用random_string = char(floor(26*rand(1, 10)) + 65);,它给了我 10 个以大写 A 开头的大写字母(这是 ASCII table 中的第 65 位),遍历所有 26 个英文字母。【参考方案4】:

你试过内置函数tempname吗?例如,这两行将在 rand_string 中为您提供随机字符串:

temp_name = tempname
[temp1, rand_string] = fileparts(temp_name)

请注意,rand_string 也将包含下划线字符“_”。

【讨论】:

另请注意,生成名称中的前 2 个字母将是 tp,所有其他字母将是 a,b,c,d,eftempname 实际上根本不会生成随机字符串,它会生成(修改的)UUID。 tempname 给了我一个完整的临时路径作为前缀 C:\Users\JoeDoe\Temp\tp7eff7653_0873_4c68_85ba_a51d5d9fe71f

以上是关于如何在 Matlab 中生成随机字符串?的主要内容,如果未能解决你的问题,请参考以下文章

在MATLAB中生成一定范围内的随机数

如何在 Matlab 中生成两个具有给定相关系数的 Weibull 随机向量?

如何在Java中生成随机字符串[重复]

如何在Matlab中生成具有对数正态分布和指定几何平均数和几何标准差的随机数

如何在Java中生成随机字符串[重复]

如何在matlab中生成概率3D图