我遇到的问题是它只能部分工作,但我可以添加什么来使其工作?
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);
我遇到的问题是它只能部分工作,但我可以添加什么来使其工作?
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);
您不是连接字符串,而是连接字符数组。以这种方式思考,它已经回答了您的问题:如果您有一个两位数,则 char-array 比一位数的 char-array 长一个元素......并且您不能连接两个不同的数组垂直大小。
解决方案相当简单:使用实际字符串(在 R2016a 附近引入)。字符串用""
而不是表示''
,它们是字符。所以替换你char
的string
,它工作正常。(更好的是:提供formatSpec
as ""
-string 它sprintf()
会立即返回一个字符串)
边注:
顺便说一句,如果您正在循环,您应该始终分配内存。这就是为什么Str
有一个橙色波浪下划线。这是因为 MATLAB 将数组连续存储在 RAM 中,并且必须将其复制到更大的部分,它超出了当前部分。因此,而不是循环中的Str=[]
、 writeStr = strings(length(A2),1)
和 index Str(i) = ...
。
就个人而言,我num2str
更喜欢这样,sprintf
但我不能给出一个很好的理由,除了它在不提供格式的情况下也可以工作。