2012-07-03 111 views
0

我正在工作project euler problem,它要求我排序名稱的文本文件,然後根據字母的位置爲名稱中的每個字母賦值(即'Bob'= 2,15 ,2)。參考表:MATLAB

我想在Excel中使用類似VLOOKUP函數的問題來解決問題。我想用字母順序創建一個帶有字母順序的參考列向量 - 每個字母在參考向量中的位置就是它的「值」。然後我可以在我的名字表中輸入一個條目,比如說「BOB」,然後在參考向量中查找值B,O和B,輸出它們的位置,從而輸出每個字母的值。

我的問題:你如何將一個矩陣中的值引用到另一個向量中的值?感謝您對這個每個人的幫助。

+0

@iCodez:哦!我想知道爲什麼所有這些項目歐拉問題不斷涌現! – knedlsepp

+0

@knedlsepp - 是的,對於轟炸'活躍'頁面感到抱歉。 :)我們目前正在燒錄標籤。它應該在一小時內銷燬。 – iCodez

回答

1

除非性能在這裏真正關心,否則我不會爲查找表而煩惱。有一種簡單的方法可以將您的角色轉換爲數字。

取每個字符串,它們使用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' 
+0

+1不需要顯式演員:'num = upper(s) - 'A'+ 1' – Amro

+0

這真棒幫助 - 絕對是一個更好的解決方案。感謝大家。對於我自己的發展,我仍然很好奇,可以學習如何檢查一個角色,將它與另一個向量中的條目相匹配,並記住它所對應的值。 – user1499689

+0

太棒了。謝謝Stewman。 – user1499689

0

你需要產生各種各樣的查找表的方法。我們將以您在這裏的一般示例爲例。字母表中有26個字母,不區分大小寫。

Basic_lookup = 1:26; % Note: this can be changed up if you want some level of randomness. 
% Basic_lookup = randperm(26); % I like this a bit better for randomness sake. And is just an example of making it random. 

現在,這是去從1到26,所有你需要做的僅僅是經過你的價值具有價值,並叫你從查找表所需要的值的字符串中的一個行向量。 @sfstewman在他們的文章中詳細說明了這一點。你可以很容易地從中適應。

+0

此外,只是一個筆記...如果你想考慮的情況下,你需要適應上述代碼,以適應大小寫。 –