本节说明 MATLAB 中两种文本类型:char(单引号,字符数组)与 string(双引号,字符串对象),并归纳向量化、预分配与代码组织等编程习惯。两者均可表示文字,但索引、比较与拼接规则并不相同。入门阶段的正文与函数参考仍以单引号 char 为主,见字符串基础;较新的 MATLAB 还提供 string 类型。若当前环境把双引号仍按字符数组处理,比较与拼接请按 char 的规则书写。
c = 'hello' % char:字符数组,尺寸 1×5
s = "hello" % string:一个字符串对象,尺寸 1×1
class(c)
class(s)char 按字符排成一行,c(2) 是第二个字符。string 把整段文字当作一个对象,s(1) 仍是整句,而不是某个字母。
string 更方便的地方
在支持 string 的环境中,相等判断可用 ==,拼接可用 +,并对字符串数组一次调用 upper 等函数:
a = "hello";
b = "hello";
a == b % 1
words = ["apple" "banana" "cherry"];
words(2) % "banana"
upper(words) % 整批转为大写
str = "你好" + "世界" % "你好世界"对 char 做整体相等判断应使用 strcmp,长度不同时直接写 == 往往会报错。新脚本若确认环境支持 string,可优先用它处理整段文本;需要逐字符下标或对接只接受 char 的旧函数时,再转回字符数组。
char 仍然常见
s = 'MATLAB';
s(2) % 'A'
class(s) % 'char'
double(s) % 各字符的编码既有脚本、低级文件读写以及不少内置函数的返回值仍是 char。两种类型并存时,可用 string(c) 把字符数组转为 string,用 char(s) 把 string 转为字符数组,转换后再做比较或拼接,避免混用规则。
对照
| char(单引号) | string(双引号) | |
|---|---|---|
| 尺寸含义 | 1×n,n 为字符个数 | 1×1 表示一句;数组的每一格是一句 |
| 取第 2 个 | 第二个字符 | 第二个字符串(若为数组) |
| 相等 | strcmp | == |
| 拼接 | 方括号或 strcat | + |
向量化与预分配
对整段数值做同一运算时,应优先写成数组表达式,而不是逐元素 for 循环。循环无法避免时,先用 zeros 按最终长度占位,再写入各元素,避免反复扩大数组。下面用较小的 n 对照两种写法,结果应相同:
n = 8;
y = zeros(1, n);
for i = 1:n
y(i) = i^2;
end
x = 1:n;
y2 = x.^2;
disp(y)
disp(y2) 1 4 9 16 25 36 49 64
1 4 9 16 25 36 49 64数据量大时,向量化通常明显快于逐元素循环。逻辑必须按元素分支、又难以写成逻辑索引时,再使用循环,并保持预分配。
其它习惯
- 脚本里不必查看的中间结果在语句末尾加分号,避免命令窗口被刷满。
- 可复用的计算写成函数文件或匿名函数,减少复制粘贴。
- 变量名写出用途,例如
total_score比x2更容易读懂。 - 随机实验在生成随机数之前调用
rng固定种子,便于复现,见随机数。
本节说明了 char 与 string 的适用场景,并归纳向量化、预分配与可复现随机数等习惯。下一章见 MATLAB 函数参考:按类别查阅常用内置函数的说明与示例。