是否有更简单或更有效的方法来完成以下工作?

1个视图(过去30天)
作业是:“写一个程序(函数),它接受一个行和列未知的非空整数数组a,并返回一个字符串矩阵B,其中矩阵a在左侧填充行号,后面跟着一个制表符(char(9)),并在顶部填充列号。”
我提出的代码,这似乎是工作如下:
函数B =标签(一个)
函数用数字标记数组中的行和列
B = string ();
%将B设置为A数组的字符串版本
[~, columnsInB] = (B)大小;
%获取数组的当前大小
insertRow = 0(1、columnsInB);
%创建一个占位符,稍后在插入行时使用
rowToInsert = 1;
%定义要插入的行
columnToInsert = 1;
%定义要插入的列
B = [B (1: rowToInsert-1,:);insertRow;B (rowToInsert:,:)];
将字符串数组B设置为它的副本,其中插入了额外的元素
%的行
(rowsInB ~) = (B)大小;
获取数组的新大小
insertColumn = 0 (rowsInB, 1);
%创建一个占位符,稍后在插入列时使用
B = [B(:,1:columnToInsert-1), insertColumn, B(:,columnToInsert:end)];
将字符串数组B设置为它的副本,其中插入了额外的元素
%列
[rowsInB, columnsInB] = (B)大小;
获取数组的新大小
(1) =' '
%将第一个值设置为零
行= 2:rowsInB
%循环向第一列添加行号并缩进
B(行)=(行- 1+”“);
结束
列= 2:columnsInB
%循环将列号添加到第一行
B(1, columns) = columns - 1;
结束
结束

接受的答案

j·亚历克斯。李
j·亚历克斯。李 2020年10月6日
你可以这样做
函数B = label1 (A)
(行,关口)= (A)大小;
B = (""字符串(1:关口);[string((1:行)”)+ char (9)];
结束
我并不是说它更简单/更高效,也不是说它最紧凑。对于它是否是一个有用的学习/教学片段,我有复杂的感觉。
hw问题很可能是在“字符串”真正存在之前编写的,而saught的答案是一个字符数组。至少这是一个更有趣的问题。
3评论
j·亚历克斯。李
j·亚历克斯。李 2020年10月6日
这一行隐藏隐式类型转换和连接。
连接
[a, b]
是水平连接的缩写吗
horzcat (a, b)
而且
(c, d)
是垂直连接的缩写吗
vertcat (c, d)
隐式类型 转换 对字符串进行操作。
试一试
3.1415 +""
你得到了绳子
“3.1415”
因此,您隐式地将double 3.1415转换为一个字符串,就像您做的那样
字符串(3.1415)
在转换A时,您已经在原始代码中使用了上述版本。
因此,您可以使用隐式转换创建行号的列字符串数组
字符串((1:行)”)+ char (9)
并与A连接,这也会导致A隐式转换为字符串(A)。
C = horzcat (string((1:行)”)+ char (9), A)
这是带有方括号的“内部”级联。
现在您可以使用相同的原则来制作头部
H = horzcat (""1:峡路)
所以你甚至不需要1:cols周围的string()。
然后
B = vertcat (H, C)
或者你可以用方括号一次性完成

登录发表评论。

更多的答案(0)

s manbetx 845

社区寻宝

在MATLAB中央找到宝藏,并发现社区可以如何帮助你!

开始狩猎!