我需要帮助编写一个程序,该程序应该计算字符串中字母出现(大写或小写)的次数。您可以对字符串进行硬编码或从控制台中读取它。您的程序应显示字母表中每个字母的最终计数。
示例
输入:
“注意上面代码中的错误;我只是证明它是正确的,没有尝试过。 -Donald Knuth“
输出:
A:4,B:3,C:3,d:5,E:9,F:1,G:1,H:3,I:5,J:0,K:1,L:2 ,M:0,N:5,O:8,P:1,Q:0,R:5,S:1,T:7,U:2,V:3,W:1,X:0,Y :1,Z:0
我想我知道结构,但由于我没有26个寄存器可供使用,我必须将每个递增字母的值存储在它自己的内存段中。我该如何处理。非常感谢。
答案 0 :(得分:1)
考虑您可以阻止一块内存,并为每个数字分配一些字节数。然后要获取特定字母,请使用字母的整数值乘以单元格的长度。
例如,如果你为每个单元选择了四个字节(一个典型的整数长度),你就会留出4 * 256个字节,并用$ STARTOFARRAY +(4 * 97)之类的地址加入它,然后递增整数
答案 1 :(得分:0)
分配足够大的内存块以容纳26个元素(每个元素可以是1个字节,2个字节,4个字节,或者您喜欢的多个元素)。一种简单的方法是使用db
/dw
/dd
在.bss
部分创建此内存块。该块中的每个元素都对应于字母表中的字母。
现在您拥有了内存块,您需要一些索引方法。在这里,您有两种选择:
如果某个字符位于['A', 'Z']
范围内,则减去'A'
以获取索引,如果该字符位于['a', 'z']
范围内,则将'a'
减去获取索引,否则忽略该字符。
将大写转换为小写,反之亦然。如果查看ASCII table,您会看到小写字母的值大于大写字母。从那里你应该能够找出如何将字符转换为小写的方法。获得小写字符后,从中减去'a'
以获取索引。
获得索引后,通过将索引乘以每个元素的大小加到块的起始地址,将索引用于内存块。获得此元素的地址后,inc
会重复该元素。
重复直到读完所有字符,然后打印结果。如果您必须自己编写打印功能,请注意输出多于一位的数字会变得不那么简单。为了打印它,不再需要添加'0'
来获取该数字的ASCII等效值。