除非性能在這裏真正關心,否則我不會爲查找表而煩惱。有一種簡單的方法可以將您的角色轉換爲數字。
取每個字符串,它們使用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