我有一个家庭作业计划我遇到了问题。我们基本上必须采用一个词(例如MATLAB),并使用Scrabble规则为函数提供正确的分数值。还有其他一些事情,如双字和双点值,但我正在努力的是转换为ASCII。我需要将我的字符串转换为ASCII格式,然后总结这些值。我们只知道字符串的基本知识,我们的老师很无用。我已经尝试将字符串转换为数字,但这并不完全正常。有什么建议吗?
function[score] = scrabble(word, letterPoints)
doubleword = '#';
doubleletter = '!';
doublew = [findstr(word, doubleword)]
trouble = [findstr(word, doubleletter)]
word = char(word)
gameplay = word;
ASCII = double(gameplay)
score = lower(sum(ASCII));
答案 0 :(得分:8)
建立弗朗西斯的帖子,我建议你做的是创建一个查找数组。你当然可以将每个字符转换成它的ASCII等价物,但是我要做的是有一个数组,其中输入是你想要的字符的ASCII码(稍加修改),输出将是点值人物。一旦你找到了这个,你可以总结点数来得到你的最终得分。
为了获得你想要的工作,我现在要在Scrabble中省去双点,双字母,空白瓷砖和整个有趣的东西。通过咨询Wikipedia,这是Scrabble中遇到的每个字母的点分布。
我们要做的是将您的单词转换为小写以确保一致性。现在,如果您查看字母a
,这对应于ASCII代码97.您可以使用我们之前谈到的double
函数来验证:
>> double('a')
97
由于字母表中有26个字母,这意味着从a
到z
应该从97到122.由于MATLAB开始将数组索引为1,我们可以做的是减去每个我们的字符为96,这样我们就可以从1到26找出这些字符的数字位置。
让我们从构建查找表开始。首先,我要定义一大堆字符串。每个字符串表示与Scrabble中的每个点相关联的字母:
string1point = 'aeionrtlsu';
string2point = 'dg';
string3point = 'bcmp';
string4point = 'fhvwy';
string5point = 'k';
string8point = 'jx';
string10point = 'qz';
现在,我们可以使用每个字符串,转换为double
,减去96,然后将每个相应的位置分配给每个字母的点。让我们像这样创建我们的查找表:
lookup = zeros(1,26);
lookup(double(string1point) - 96) = 1;
lookup(double(string2point) - 96) = 2;
lookup(double(string3point) - 96) = 3;
lookup(double(string4point) - 96) = 4;
lookup(double(string5point) - 96) = 5;
lookup(double(string8point) - 96) = 8;
lookup(double(string10point) - 96) = 10;
我首先通过zeros
函数创建一个长度为26的数组。然后我找出每个字母的去向,并为每个字母分配它们的点值。
现在,你需要做的最后一件事就是取一个字符串,小写确定,然后将每个字符转换为ASCII
等价物,减去96,然后总结这些值。如果我们得到......说...... MATLAB:
stringToConvert = 'MATLAB';
stringToConvert = lower(stringToConvert);
ASCII = double(stringToConvert) - 96;
value = sum(lookup(ASCII));
瞧瞧......我们得到:
value =
10
上述代码的最后一行至关重要。基本上,ASCII
将包含一堆索引位置,其中每个数字对应于字母出现在字母表中的数字位置。我们使用这些位置来查找每个字母给我们的点/分数,并且我们总结所有这些值。
双点值和双字出现的下一部分可以在我的其他StackOverflow帖子中找到:
Calculate Scrabble word scores for double letters and double words MATLAB
答案 1 :(得分:1)
>> myString = 'hello, world';
>> ASCII = double(myString)
ASCII =
104 101 108 108 111 44 32 119 111 114 108 100
>> total = sum(ASCII)
total =
1160
char()
的MATLAB帮助说(强调添加):
S = char(X)将非负整数代码的数组X转换为字符数组。有效代码范围为0到65535,其中代码0到127对应于7位ASCII字符。 MATLAB®可以处理的字符(7位ASCII字符除外)取决于您当前的语言环境设置。 要将字符转换为数字数组,请使用双重功能。
ASCII图表here。
答案 2 :(得分:-4)
clc
clear all
close all
code=input('Enter your String \n','s'); %input function is used to enter string
ASCII=double(code);
disp(ASCII) % ans will be vector means may be single row multiple column because of you are entering a string