for i=1:30
Name(i,1)=sprintf('String_%i',i);
end
我只是混淆了这里没有用的东西,这个脚本看起来非常简单,可以建立一个编号从1到30的字符串列表。收到错误
订阅的分配维度不匹配。
答案 0 :(得分:5)
Matlab没有真正的字符串,它们有char数组。与几乎所有编程语言一样,Matlab无法在不知道要分配多少内存的情况下定义变量。 java解决方案看起来像这样:
String str[] = {"I","am","a","string"};
与c ++解决方案类似:
std::string str[] = {"I","am","another","string"};
c解决方案看起来不同,但通常与c ++中的解决方案相同:
const char* str[] = {"I","am","a","c-type","string"};
然而,尽管出现了这些,但从某种意义上说它们基本上是相同的,即使它们不会被启动,它们都知道要分配多少数据。特别是你可以写:
String str[3];
// Initialize element with an any length string.
原因是存储在每个元素中的内存通过它在java中的引用和c和c ++中的指针存储。因此,根据操作系统的不同,每个元素都是4(32位)或8(64位)字节。
但是,在Matlab矩阵中,数据按值存储。这使得无法在N
或1xN
矩阵中存储Nx1
字符数组。矩阵中的每个元素只允许与char的大小相同,并且是char类型。这意味着如果使用字符串,则需要使用数据结构cell
(也由Benoit_11建议),该数据结构存储对每个元素中任何Matlab对象的引用。
k = 1:30;
Name = cell(length(k),1);
for i=k
Name{i,1}=sprintf('String_%i',i);
end
希望这个解释对你有意义。我认为根据你的尝试,你至少有一些编程经验来自至少一种其他语言而不是matlab。