创建一个字符串数组

38

在MATLAB中,是否可能在for循环中创建一个字符串数组?

例如:

for i=1:10
Names(i)='Sample Text';
end

我似乎不能以这种方式完成它。


4
你的代码不能正常运行的原因是,在 MATLAB 中,字符串是由字符组成的一维数组,所以你试图将11个字符压缩到数组的一个元素中。你可以按照Amro的建议使用单元格(它们基本上是数组,每个元素只包含指向某些数据的指针,而“某些数据”可以是一个字符串);或者按照b3的建议使用二维字符数组(注意Amro答案下面讨论的细节问题)。 - Jonas Heidelberg
7个回答

47
你需要使用cell数组:
names = cell(10,1);
for i=1:10
    names{i} = ['Sample Text ' num2str(i)];
end

2
也可以使用字符数组来实现这个功能。请参见我的回答 - b3.
1
@b3:假设它们的长度都相同(或者用空格填充以匹配)。 - Amro
2
同意,这是原帖作者问题中的情况。 - b3.

9
您可以通过循环创建一个字符数组来实现这一点:
>> for i=1:10
Names(i,:)='示例文本';
end
>> Names
Names =
示例文本 示例文本 示例文本 示例文本 示例文本 示例文本 示例文本 示例文本 示例文本 示例文本
但是,最好使用REPMAT来实现:
>> Names = repmat('示例文本', 10, 1)
Names =
示例文本 示例文本 示例文本 示例文本 示例文本 示例文本 示例文本 示例文本 示例文本 示例文本

9

另一个选择:

names = repmat({'Sample Text'}, 10, 1)

2
使用b3用于字符数组的技术,创建与Amro相同的单元数组。;-) - Jonas Heidelberg

3
最近MATLAB新增了一些功能:
在R2016b版本中引入了字符串数组(正如Budognovice所提到的):

字符串数组存储文本片段,并提供一组用于处理文本数据的函数。您可以像处理任何其他类型的数组一样索引、重塑和连接字符串数组。

此外,从R2017a开始,您可以使用双引号""创建字符串
因此,如果您的MATLAB版本大于或等于R2017a,则以下内容将适用:
for i = 1:3
    Names(i) = "Sample Text";
end

请查看输出结果:

>> Names

Names = 

  1×3 string array

    "Sample Text"    "Sample Text"    "Sample Text"

不再需要处理单元数组。

2

解决这个老问题的另一个方法是在Matlab 2016b中引入的新容器string array。根据我在官方Matlab文档中所读到的,这个容器类似于单元数组,大多数与数组相关的函数都应该可以直接使用。对于您的情况,新的解决方案如下:

a=repmat('Some text', 10, 1);

这个解决方案类似于Rich C解决方案,应用于字符串数组。

1

Amro所述,最简洁的方法是使用单元数组。不过,Budo提到了在MATLAB R2016b版本中引入的新string。使用这个新对象,你可以很容易地在循环中创建字符串数组,如下所示:

for i = 1:10
  Names(i) = string('Sample Text');
end

这会报错:"输入参数类型为'char',未定义函数'string'。" - Danijel
@Danijel:这是MATLAB新版本中的一个选项。我猜你在使用旧版本。 - gnovice

0
创建字符串矩阵的最简单方法之一如下所示:
x = [{'第一个字符串'} {'第二个参数'} {'第三个文本'} {'第四个组件'}]

1
但他明确要求通过for循环的方式来完成。你的方法必须是手动的,没有办法处理1000多个条目。 - Sifu
这解决了我的问题(我只是在寻找一种快速且简单的方法来用硬编码的字符串填充数组,而这是谷歌搜索结果中排名最高的)。 - user2348114

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接