String 矩阵到字符串,行的新行

String 矩阵到字符串,行的新行,string,matlab,string-concatenation,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 ma

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

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


我不知道我以前怎么没有发现有人问过这个问题,但我一直在搜索,结果一无所获

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

下面是一个简单的例子:

>> ['one' char(10) 'two']
ans =
one
two
结果是
strcat
去掉了换行符,因此将循环的内容替换为:

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

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

对不起,这不是我的问题。问题是在最后一列之后添加新行。这将在每列后面添加一行。@user2243357:我刚刚更新了答案。位
s=[s,char(10)]可能是您需要的。我实际上需要它来处理任意大小的矩阵。而且,s=[s,char(10)]不起作用。由于某种原因,它仅在最后一行之后生成新行。。并给出了'12345678',它将给出一个新的行,但当它重新启动strcat时,它似乎忽略了它,下一次迭代(因此数字被压缩在一起,即:45)我在Windows7上。它也为我提供了一个新行,但仅在最后一行之后(当循环处于终止迭代时)。调试测试时,它首先生成一个新行,但当它返回到循环中时,新行消失了(我猜strcat忽略了它)。
>> 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