Match numbers with letters

2 ビュー (過去 30 日間)
Pax Azx
Pax Azx 2021 年 1 月 29 日
コメント済み: Mathieu NOE 2021 年 2 月 1 日
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 件のコメント
dpb
dpb 2021 年 1 月 29 日
What have you tried?
Philippe Lebel
Philippe Lebel 2021 年 1 月 29 日
as there are many solutions posted that answer your question, i'd suggest to mark your question as answered.

サインインしてコメントする。

採用された回答

Mathieu NOE
Mathieu NOE 2021 年 1 月 29 日
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 件のコメント
Mathieu NOE
Mathieu NOE 2021 年 1 月 29 日
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 2021 年 1 月 29 日
I wrote to you. Thank you if you help.

サインインしてコメントする。

その他の回答 (2 件)

Jan
Jan 2021 年 1 月 29 日
編集済み: Jan 2021 年 1 月 31 日
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 件のコメント
Jan
Jan 2021 年 1 月 30 日
@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 2021 年 2 月 1 日
@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
Philippe Lebel 2021 年 1 月 29 日
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

カテゴリ

Help Center および File ExchangeData Type Conversion についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by