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

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

提前致谢。

【问题讨论】:

    标签: matlab random


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 2011-01-09
    • 2023-03-19
    • 1970-01-01
    • 2014-02-09
    • 2017-08-01
    相关资源
    最近更新 更多