【问题标题】:Group characters and form a matrix in Matlab在Matlab中对字符进行分组并形成矩阵
【发布时间】:2015-02-01 23:41:52
【问题描述】:

我有 26 个字符 A 到 Z,我将 4 个字符组合在一起,然后用空格分隔以下 4 个字符,如下所示:

abcd efgh ijkl mnop qrst uvwx yz

我的matlab编码如下:

str = 'abcdefghijklmnopqrstuvwxyz';

fstr = [repmat('%c', 1, 4) ' '];

A=fprintf(fstr, str);

问题:我希望在一行有 8 个字符时换行,如下所示:

abcd efgh
ijkl mnop
qrst uvwx
yz

有什么想法吗?请帮忙。

谢谢。

【问题讨论】:

  • A 只是32。你需要先解决这个问题。
  • 好的@Divakar,我明白了,谢谢:-)
  • 如果你“明白”了,为什么不编辑问题。就目前而言,它只会让未来的读者感到困惑,因为您声称 Astr 在每 4 个字符后用空格填充,这不是您问题中的代码所做的。

标签: arrays matlab matrix


【解决方案1】:

代码(vec2mat 的方法)-

%// Input
input_str = 'abcdefghijklmnopqrstuvwxyz' %// Input

%// Parameters
group_numel = 4;
num_groups_per_row = 2;

str1 = vec2mat(input_str,group_numel)
str2 = [str1,repmat(' ',size(str1,1),1)]
output_str = vec2mat(str2,(group_numel+1)*num_groups_per_row)

代码运行 -

>> input_str
input_str =
abcdefghijklmnopqrstuvwxyz
>> output_str
output_str =
abcd efgh 
ijkl mnop 
qrst uvwx 
yz       

【讨论】:

  • 嗨@Divakar,这正是我想要的。惊人。您的编码简短而简单。感谢您的帮助。
  • 嗨@Divakar,我想知道为什么方法#1 不起作用。正如我刚才提到的,我有 A='abcd efgh ijkl mnop qrst uvwx yz'。既然我的输入和urs一样,为什么没有输出。
【解决方案2】:

另一种方法是使用regexp

A='abcd efgh ijkl mnop qrst uvwx yz';
A_splited=regexp(A, '\S\S\S\S\s\S\S\S\S', 'match')

但是,在这种情况下,最后一个“yz”不会出现。所以需要使用类似的东西进行调整。

A_splited{1,end+1}=A(end-rem(length(A),10)+1:end)

【讨论】:

    【解决方案3】:

    使用正则表达式的另一种方法:

    str = 'abcdefghijklmnopqrstuvwxyz';
    str = regexprep(str, '(.{4})', '$1 ');
    str = regexprep(str, '(.{4} .{4}) ', '$1\n');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多