0

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

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);
4

1 回答 1

1

您不是连接字符串,而是连接字符数组。以这种方式思考,它已经回答了您的问题:如果您有一个两位数,则 char-array 比一位数的 char-array 长一个元素......并且您不能连接两个不同的数组垂直大小。

解决方案相当简单:使用实际字符串(在 R2016a 附近引入)。字符串用""而不是表示'',它们是字符。所以替换你charstring,它工作正常。(更好的是:提供formatSpecas ""-string 它sprintf()会立即返回一个字符串)

边注:

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

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

于 2020-03-27T17:46:15.303 回答