在MatLab中生成随机字符串

Aabualia

我正在尝试从一个很长的预定义字符数组生成一个字符串数组,如下所示

如果我有以下长字符串:

s= 'aardvaqrkaardwolfaajronabackabacusabvaftabalongeabandonabandzonedaba'

我想根据以下规则创建一组随机字符串

  1. 字符串应介于4到12个字符之间,应为end或start

  2. 与以下字符之一 {j,q,v,f,x,g,b,d,z}

奴才

因此,这里提供了一个解决方案,该方案提供了满足以下规则的所有字符串:

  • 起始字符和结束字符必须来自字符串:

    start_end_char= 'jqvfxgbdz';

  • 长度必须在4到8个字符之间

  • 该字符串必须顺序正确。意味着结果字符串必须以完全相同的方式出现在“长”字符串中

那我在做什么呢?

  • 首先,我找到预定义的起始字符和结束字符出现在主字符串中的所有位置(小心使用s2而不是s用作字符串名称)。
  • 然后我得到了这些点的排序列表(list_sorted
  • 接下来的事情是为每个元素获取可接受的结束字符的索引列表(遵循上述规则1和2)。helper由于字符串中的长度不同,因此将其保存为单元格数据类型
  • 最后但并非最不重要的一点是,我构造了所有这些字符串并将其保存resulting_strings为必须是单元格数据类型的字符串

    s2= 'aardvaqrkaardwolfaajronabackabacusabvaftabalongeabandonabandzonedaba';
    start_end_char= 'jqvfxgbdz';
    length_start = length(start_end_char);
    
    %%finding all positions of possible starting/ending points
    position_char= cell(1,length_start);
    for k=1:length_start
        position_char{k}=find(s2==start_end_char(k));
    end
    list_of_start_end_points=[];
    %% getting an array with all starting/ending points in the given array
    for k=1:length_start
        list_of_start_end_points= horzcat(list_of_start_end_points,position_char{k});
    end
    sorted_list= sort(list_of_start_end_points);
    %% getting possible combinations
    helper = cell(1, length(sorted_list));
    length_helper=[];
    for k=1:length(sorted_list)
        helper{k}=find(and(sorted_list-sorted_list(k)>=4,sorted_list-sorted_list(k)<=8));
        length_helper = length_helper + length(helper);
    end
    resulting_strings = cell(1, length_helper);
    l=1;
    for k=1:length(sorted_list)
        for m=1:length(helper{k})
            resulting_strings{1,l} = s2(sorted_list(k):sorted_list(helper{k}(m)));
            l=l+1;
        end
    end
    

此解决方案使用了很多循环,而前两个循环是可协商的(可接受的起始/结束字母大小的循环中没有循环),而如果原始字符串长得多,则后两个循环可能会非常耗时。因此,也许有人会为以后的循环找到矢量化的解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章