我有一个作业计划,我遇到了一个问题。我们基本上必须取一个单词(如MATLAB),并有这个函数,用拼字游戏的规则给出正确的分数值。还有其他的问题,如双字和双点值,但我正在挣扎的是转换为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));发布于 2014-09-19 02:06:25
基于Francis的帖子,我建议您创建一个查找数组。您当然可以将每个字符转换为它的ASCII等价物,但是我要做的是有一个数组,其中输入是您想要的字符的ASCII代码(稍加修改),输出将是字符的点值。一旦你发现了这一点,你就可以把分数加起来,得到你最后的分数。
为了得到你想要的工作,我现在要省去两个点,双字母,空白瓷砖,以及在拼字游戏中的所有有趣的东西。通过咨询维基百科,这是在拼字游戏中遇到的每个字母的点分布。
我们要做的是把你的话转换成小写,以确保一致性。现在,如果您看一下字母a,它对应于ASCII代码97。您可以通过使用前面提到的double函数来验证这一点:
>> double('a')
97由于字母表中有26个字母,这意味着从a到z应该从97个到122个。因为MATLAB从1开始索引数组,我们所能做的就是将每个字符减去96,这样我们就能够计算出这些字符从1到26的数字位置。
让我们从构建查找表开始。首先,我要定义一大串字符串。每个字符串表示与拼字游戏中的每个点相关联的字母:
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将包含一系列索引位置,其中每个数字对应于字母在字母表中的数字位置。我们使用这些位置来查找每个字母给我们的点数/得分,并对所有这些值进行求和。
第2部分
下一部分,在我的另一篇StackOverflow文章中,可以找到“双点值”和“双单词”:
发布于 2014-09-19 01:10:59
从字符串转换为ASCII:
>> myString = 'hello, world';
>> ASCII = double(myString)
ASCII =
104 101 108 108 111 44 32 119 111 114 108 100总结一下这些价值:
>> total = sum(ASCII)
total =
1160MATLAB对char()的帮助说(强调后加):
S= char(X)将非负整数码的数组X转换为字符数组。有效代码范围从0到65535,其中代码0到127对应于7位ASCII字符.MATLAB可以处理的字符(7位ASCII字符除外)取决于当前的区域设置。若要将字符转换为数字数组,请使用双函数.。
ASCII图这里。
https://stackoverflow.com/questions/25924769
复制相似问题