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 Kommentare

dpb
dpb am 29 Jan. 2021
What have you tried?
Philippe Lebel
Philippe Lebel am 29 Jan. 2021
as there are many solutions posted that answer your question, i'd suggest to mark your question as answered.

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Mathieu NOE
Mathieu NOE am 29 Jan. 2021

2 Stimmen

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 Kommentare

Pax Azx
Pax Azx am 29 Jan. 2021
thanks but I have to do this for thousands of names in the txt file.
Mathieu NOE
Mathieu NOE am 29 Jan. 2021
ok so let's create a function and loop for all words extracted from a sentence
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
Pax Azx
Pax Azx am 29 Jan. 2021
I wrote to you. Thank you if you help.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Jan
Jan am 29 Jan. 2021
Bearbeitet: Jan am 31 Jan. 2021

1 Stimme

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 Kommentare

I cannot fight against Jan, he's really too good ...
Score = sum(Num(Num>0)); % just avoid taking blanks into account
Pax Azx
Pax Azx am 29 Jan. 2021
There is one name on each line and there are 18239 names in total.
Jan
Jan am 30 Jan. 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
Mathieu NOE am 1 Feb. 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.

Melden Sie sich an, um zu kommentieren.

Philippe Lebel
Philippe Lebel am 29 Jan. 2021

0 Stimmen

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

Kategorien

Mehr zu Convert Image Type finden Sie in Hilfe-Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by