1

标题基本上说明了一切。这是我当前的代码,但它并不完全正确。它放置 \n 而不是新行。

我想遍历矩阵的一行,在行中的每个元素之间放置一个空格,然后为下一行添加一个新行。

mat = [1,2,3,4;5,6,7,8]; %must work for arbitrary size matrix.. just an example
s = '';
for i = 1:size(mat,1)
  s = strcat(s,sprintf('%d ',mat(i,:)));
  s = [s,'\n']; %and many variations of trying to add this 
end

这目前产生: 1 2 3 4\n5 6 7 8\n

我想要的是(作为字符串):

1 2 3 4
5 6 7 8

我不知道我以前怎么没有找到有人问过这个特定的问题,但是我搜索无济于事!

4

1 回答 1

2

换行符是字符代码 10 ( char(10))。因此,您可以保持当前状态sprintf并使用char(10)

s = [s,char(10)];

下面是一个简单的例子:

>> ['one' char(10) 'two']
ans =
one
two

结果是strcat去掉了换行符,所以将循环的内容替换为:

s = [s sprintf('%d ',mat(i,:)) char(10)];

strcat文档中:

对于字符数组输入,strcat 删除尾随的 ASCII 空白字符:空格、制表符、垂直制表符、换行符、回车符和换页符。要在连接字符数组时保留尾随空格,请使用水平数组连接,[s1, s2, ..., sN].

此外,num2str 可以做你想做的事,但如果你在每个数字中有超过 1 个数字,那么你的输出会有点不同:

>> num2str(mat)
ans =
1   2   3   4
5   6   7   8
9  10  11  12

另一个没有循环的时髦解决方案:

>> s = sprintf([repmat('%d ',1,size(mat,2)) '\n'],mat')
s =
1 2 3 4 
5 6 7 8 
于 2013-11-10T02:20:48.677 回答