首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

MATLAB 字母數字雙向映射實現:字符與索引互轉

     編輯:程式設計綜合問答

需求

輸入 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 向量化思維,拒絕循環,代碼簡潔高效。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved