用MATLAB数组中的数字替换字母

时间:2015-09-02 09:58:57

标签: matlab replace letters-and-numbers

我正在尝试编写一个标记测试结果的函数。参与者给出的答案存储在nx1单元阵列中。但是,这些文件存储为字母。我正在寻找一种方法将(a-d)转换成数字(1-4)即。 a = 1,b = 2因此可以使用逻辑运算比较这些答案。

到目前为止我所拥有的是:
     [num,txt,raw] = xlsread(' FolkPhysicsMERGE.xlsx',' X3:X142');
     FolkPhysParAns = TXT;

我似乎能够找到如何将数字转换为字母而不是相反的方式。我觉得应该有一个相对简单的方法来做这个,任何想法?

2 个答案:

答案 0 :(得分:2)

如果您有一个字母单元格数组:

>> data = {'a','b','c','A'};

你只需要:

  1. 使用lower转换为小写,以平等对待这两种情况;
  2. 使用cell2mat;
  3. 转换为字符数组
  4. 减去({1}}的ASCII代码并添加'a'
  5. 代码:

    1

    更一般地说,如果可能的答案不是连续的字母,甚至不是单个字母,请使用ismember

    >> result = cell2mat(lower(data))-'a'+1
    result =
         1     2     3     1
    

答案 1 :(得分:0)

以为我不妨写一个答案...... 您可以使用strrep将'a'替换为'1'(注意它是字符串格式),并对所有26个字母执行此操作,然后使用cell2mat将字符串'1' - '26'等转换为数字1 -26。

让我们说:

t = {'a','b','c'} //%Array of Strings
t = strrep(t,'a','1') //%replace all 'a' with '1' 
t = strrep(t,'b','2') //%replace all 'b' with '2'
t = strrep(t,'c','3') //%replace all 'c' with '3'
%// Or 1 line:
t = strrep(g,{'a','b','c'},{'1','2','3'})
>> t = 

'1'    '2'    '3'

output = cellfun(@str2num,t,'un',0)  //% keeps the cell structure

>> output = 

[1]    [2]    [3]

或者:

output = str2num(cell2mat(t'))   //% uses the matrix structure instead, NOTE the inversion ', it is crucial here.

>> output =
 1
 2
 3