分组字符并在Matlab中形成矩阵
Group characters and form a matrix in Matlab
我有 26 个字符 A 到 Z,我将 4 个字符组合在一起,然后用 space 分隔以下 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
有什么想法吗?请帮忙。
谢谢。
代码(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
另一种方法是使用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)
另一种使用正则表达式的方法:
str = 'abcdefghijklmnopqrstuvwxyz';
str = regexprep(str, '(.{4})', ' ');
str = regexprep(str, '(.{4} .{4}) ', '\n');
我有 26 个字符 A 到 Z,我将 4 个字符组合在一起,然后用 space 分隔以下 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
有什么想法吗?请帮忙。
谢谢。
代码(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
另一种方法是使用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)
另一种使用正则表达式的方法:
str = 'abcdefghijklmnopqrstuvwxyz';
str = regexprep(str, '(.{4})', ' ');
str = regexprep(str, '(.{4} .{4}) ', '\n');