本节说明 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 对照两种写法,结果应相同:

MATLAB 向量化与预分配示例运行
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 函数参考:按类别查阅常用内置函数的说明与示例。