除非性能在这里真正关心,否则我不会为查找表而烦恼。有一种简单的方法可以将您的角色转换为数字。
取每个字符串,它们使用upper
上的情况下,减去关“A”,并添加一个到所有转换“A的成” 1',“B的为” 2的等
s = 'Bob';
num_s = upper(s) - 'A' + 1;
对于我自己的发展,我仍然很好奇,可以学习如何检查一个角色,将它匹配到另一个向量中的条目并记住它所对应的值。 - user1499689
在Matlab中做到这一点很简单。比方说,你有26个元素的查找表,lookup
lookup = zeros(26,1);
% define the lookup table
for i=1:numel(lookup)
lookup(i) = 2*i - 7; % some random function
end
现在,使用上面的字符到数字的转换:
s =
Joe
>> lookup(upper(s) - 'A' + 1)
ans =
13
23
3
这里的关键是,MATLAB允许你索引的矩阵与另一个矩阵:M(A)
。矩阵A
的元素被视为矩阵M
中的索引。您的字符串s
是一个char矩阵,您可以通过减去'A'
将其转换为数字矩阵。行lookup(...)
然后使用该转换矩阵的元素来索引矩阵lookup
。
顺便说一句,这也可以用于分配。例如,如果你想保持(独立的情况下),每一个字符计数:
% Initialize counts to zero somewhere at the beginning
counts = zeros(26,1);
... % do your stuff
% let 's' be an alphabetic word (only A-Z and a-z)
s_inds = upper(s) - 'A' + 1;
counts(s_inds) = counts(s_inds) + 1; % increment the counts of all characters in 's'
@iCodez:哦!我想知道为什么所有这些项目欧拉问题不断涌现! – knedlsepp
@knedlsepp - 是的,对于轰炸'活跃'页面感到抱歉。 :)我们目前正在烧录标签。它应该在一小时内销毁。 – iCodez