Matrix to String,行matlab的新行

时间:2013-11-10 01:59:29

标签: string matlab string-concatenation

标题基本上都说明了一切。 这是我目前的代码,但它不太正确。它放置\ 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

我不知道我之前是怎么找不到这个具体问题的人,但我搜索无济于事!

1 个答案:

答案 0 :(得分: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 documentation

  

对于字符数组输入,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