Match numbers with letters
    8 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Pax Azx
 el 29 de En. de 2021
  
    
    
    
    
    Comentada: Mathieu NOE
      
 el 1 de Feb. de 2021
            I need to find the name score of the names in a text file.
name point: David --> 4 1 22 9 4 = 4+1+22+9+4 = 40 
Thanks for your help.
2 comentarios
  Philippe Lebel
      
 el 29 de En. de 2021
				as there are many solutions posted that answer your question, i'd suggest to mark your question as answered.
Respuesta aceptada
  Mathieu NOE
      
 el 29 de En. de 2021
        hello 
this code does the trick : 
ascii_value = uint32(yourstring); % convert your char / string into corresponding ASCII value
% let's converts ASCII values into values ranging from 1 to 26 (use offsets)
% uppercase letters
ind = find(ascii_value<91);
UL = ascii_value(ind) - 64;
% lowercase letters
ind = find(ascii_value>96);
LL = ascii_value(ind) - 96;
value = sum(UL) + sum(LL); % 
4 comentarios
  Mathieu NOE
      
 el 29 de En. de 2021
				here is it 
sentence = 'His story is told in the first book of Samuel and his life as a king in the second book of Samuel and at the beginning of the First book of Kings';
STR = split(sentence);
for ci = 1:numel(STR)
    value(ci) = subfct(char(STR(ci)));
end
function value = subfct(yourstring) 
    ascii_value = uint32(yourstring); % convert your char / string into corresponding ASCII value
    % let's converts ASCII values into values ranging from 1 to 26 (use offsets)
    % uppercase letters
    ind = find(ascii_value<91);
    UL = ascii_value(ind) - 64;
    % lowercase letters
    ind = find(ascii_value>96);
    LL = ascii_value(ind) - 96;
    value = sum(UL) + sum(LL); % 
end
Más respuestas (2)
  Jan
      
      
 el 29 de En. de 2021
        
      Editada: Jan
      
      
 el 31 de En. de 2021
  
      Name  = 'David';
Num   = lower(Name) - 'a' + 1;  % 'a' -> 1, 'b' -> 2, ...
Score = sum(Num);
[EDITED] You mention in comments, that you want to do this for "names in a text file". Do the files contain one name per line?
Str = fileread('YourTextFile.txt');
Str(Str == char(13)) = [];
CStr = strsplit(Str, char(10));
Score = zeros(size(CStr));
for k = 1:numel(CStr)
    Score(k) = sum(lower(CStr{k}) - 'a' + 1);
end
4 comentarios
  Jan
      
      
 el 30 de En. de 2021
				@Mathieu NOE: I'm very happy that we are fighting together to get the best solution for the question. Seeing different approachs is useful to understand the power of MATLAB.
  Mathieu NOE
      
 el 1 de Feb. de 2021
				@Jan : tx for your nice comments , but I'm not yet to your level - still I  like to see how tricky problems can be solved elegantly by knowledgable people like you and others contributors here.
  Philippe Lebel
      
 el 29 de En. de 2021
        im late to the show, but here we go anyway...
clear
clc
name = 'david';
a = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
total = 0;
for i=1:length(name)
    arr = cellfun(@(x)isequal(x,name(i)),a);
    [row,col] = find(arr);
    total = total + col
end
0 comentarios
Ver también
Categorías
				Más información sobre Language Support en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




