标题基本上都说明了一切。 这是我目前的代码,但它不太正确。它放置\ 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
我不知道我之前是怎么找不到这个具体问题的人,但我搜索无济于事!
答案 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删除尾随的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