Matlab, проблема с конкатенацией в итерации? Как мне это исправить? - PullRequest
0 голосов
/ 27 марта 2020

Проблема в том, что она работает только частично, но что я могу добавить, чтобы она работала?

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

1 Ответ

1 голос
/ 27 марта 2020

Вы объединяете не строки, а массивы символов. Думая об этом так, он уже отвечает на ваш вопрос: если у вас есть число с двумя ди git, массив символов на один элемент длиннее, чем массив с одним числом git ... и вы не может объединить два массива разного размера по вертикали.

Решение довольно простое: использовать реальные строки (введенные где-то около R2016a). Строки обозначаются "" вместо '', которые являются символами. Так что замените ваш char на string, и он работает нормально. (Еще лучше: укажите formatSpec как "" -струну, и она sprintf() сразу же вернет строку)

Примечание:

BTW, Вы должны всегда выделять память, если вы зацикливаетесь. Вот почему Str имеет оранжевое волнистое подчеркивание. Это связано с тем, что MATLAB хранит массивы в ОЗУ непрерывно и вынужден копировать их в больший раздел, если он превосходит текущий. Поэтому вместо Str=[] напишите Str = strings(length(A2),1) и индекс Str(i) = ... в l oop.

Лично мне нравится num2str больше, чем sprintf, но я не могу дать вескую причину для этого, за исключением того, что он также работает без предоставления формата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...