题目

编写程序,分别用单引号创建字符数组(char array)和用双引号创建字符串标量(string scalar),对比两者在 <code>class</code> 类型、<code>size</code> 尺寸、<code>length</code> 长度以及元素下标索引行为上的重大差别。

输入格式:无需外部输入。

输出格式:分行对比两种文本类型的属性。

数据范围与约定:文本数据类型。

思路与算法

1. 单引号 char 数组
单引号 'Hello' 创建的是 $1 \times 5$ 的字符矩阵(元素类型为 char)。通过 c(1) 访问得到字符 'H',通过 c(1:3) 得到字符子切片。

2. 双引号 string 标量
双引号 "Hello" 创建的是一个整体维度为 $1 \times 1$ 的字符串容器(string)。s(1) 返回的依旧是整个 "Hello" 自身,而不是单个字母。

3. 跨平台兼容性
老版本 MATLAB 和 Octave 以 char 数组为核心;现代代码中,文本处理与表格列多使用 string。了解两者转换(char(s) 与 string(c))至关重要。

完整程序

% Octave / MATLAB 第71题:字符数组与字符串标量对比
c_arr = 'Octave';  % 单引号: 字符数组
s_str = "Octave";  % 双引号: 字符串对象

fprintf("--- 1. 类型对比 ---\n");
fprintf("单引号 'Octave' 类型: %s\n", class(c_arr));
fprintf("双引号 \"Octave\" 类型: %s\n", class(s_str));

fprintf("\n--- 2. 尺寸维度 size 对比 ---\n");
fprintf("单引号 size: %dx%d (1行6列字符)\n", size(c_arr, 1), size(c_arr, 2));
fprintf("双引号 size: %dx%d (Octave 8 双引号仍是 char 行向量)\n", size(s_str, 1), size(s_str, 2));

fprintf("\n--- 3. 索引提取对比 ---\n");
fprintf("字符数组首元素 c_arr(1): %c\n", c_arr(1));
fprintf("双引号提取 s_str(1): %s\n", char(s_str(1)));

运行示例

输出:

--- 1. 类型对比 ---
单引号 'Octave' 类型: char
双引号 "Octave" 类型: char

--- 2. 尺寸维度 size 对比 ---
单引号 size: 1x6 (1行6列字符)
双引号 size: 1x6 (Octave 8 双引号仍是 char 行向量)

--- 3. 索引提取对比 ---
字符数组首元素 c_arr(1): O
双引号提取 s_str(1): O