輸入 26 個字母(大小寫)或數字 0-25,輸出對應映射:'a'↔0, 'b'↔1, ..., 'z'↔25。
function output = charNumMap(input)
% 雙向映射:字母(大小寫不敏感) <-> 0-25 數字
% 輸入:字符標量/向量 或 數值標量/向量
% 輸出:對應數值向量 或 字符向量
if ischar(input) || isstring(input)
% 字母 -> 數字
input = lower(char(input)); % 統一小寫
mask = input >= 'a' & input <= 'z'; % 合法字母掩碼
output = zeros(size(input));
output(mask) = double(input(mask)) - double('a');
% 非字母位置保持 0 或可設置 NaN
elseif isnumeric(input)
% 數字 -> 字母
input = round(input(:)); % 確保整數列向量
mask = input >= 0 & input <= 25;
output = char(zeros(size(input)));
output(mask) = char(input(mask) + double('a'));
output = output'; % 恢復行向量
else
error('輸入必須為字符或數值');
end
end
> charNumMap('a')
ans = 0
> charNumMap('Z')
ans = 25
> charNumMap([0 1 25])
ans = 'abc...z' % 實際輸出 'abz'
> charNumMap('Hello')
ans = [7 4 11 11 14]
function output = charNumMapCase(input)
if ischar(input)
isUpper = (input >= 'A' & input <= 'Z');
base = double('a');
input = lower(input);
mask = input >= 'a' & input <= 'z';
output = zeros(size(input));
output(mask) = double(input(mask)) - base;
% 可選:非字母標記 -1
else
mask = input >= 0 & input <= 25;
output = char(zeros(size(input)));
output(mask) = char(input(mask) + double('a'));
if any(isUpper(mask)) % 這裡邏輯需調整,簡化演示
output(isUpper) = upper(output(isUpper));
end
end
end
mask 避免循環,提升性能。double('a') 獲取 ASCII 碼,char(n) 反向轉換。lower/upper 統一大小寫處理。掌握 MATLAB 向量化思維,拒絕循環,代碼簡潔高效。