Matlab,迭代中的连接问题?我如何解决它?

Matlab,problem with concatenation in an iteration? How do I fix it?

我遇到的问题是它只能部分工作,但我可以添加什么才能使其工作?

A2 = [20 4 6 8 5];
A3 = [10 2 3 4 6];
Str=[];
formatSpec = 'P%d (%d,%d)';
for i=1:length(A2)
    str = char(sprintf (formatSpec, i, A2(i),A3(i)));
    Str=[Str;str];
end
set(handles.text2,'string',Str);

您连接的不是字符串,而是字符数组。这样想,它已经回答了你的问题:如果你有一个两位数,则字符数组比一位数的字符数组长一个元素......你不能连接两个不同的数组垂直大小。

解决方案相当简单:使用实际字符串(在 R2016a 前后某处引入)。字符串用 "" 表示,而不是 '',它们是字符。所以用 string 替换你的 char 并且它工作正常。 (更好的是:提供 formatSpec 作为 "" 字符串,它 sprintf() 将立即 return 一个字符串)

旁注:

顺便说一句,如果你正在循环,你应该总是分配内存。这就是 Str 有橙色波浪下划线的原因。这是因为 MATLAB 将数组连续存储在 RAM 中,并且必须将其复制到更大的部分,因为它超出了当前的部分。 所以在循环中写 Str = strings(length(A2),1) 和索引 Str(i) = ... 而不是 Str=[]

就我个人而言,我更喜欢 num2str 而不是 sprintf 但我不能给出一个很好的理由,除了它也可以在不提供格式的情况下工作。