gpt4 book ai didi

mips - 如何在 MIPS 中制作一个重音不敏感的回文检查器?

转载 作者:行者123 更新时间:2023-12-05 07:22:56 27 4
gpt4 key购买 nike

我正在用 MIPS 编写一个回文检查器,我试图让它不区分重音,这样像“ahà”这样的东西也会被认为是一个回文。然而,它看起来并不像小写和大写字母之间有固定值的不区分大小写的场景那么简单。

我问过我的老师,她说我可以检查整个字符串并将任何“è”替换为“e”,然后再次检查以将任何“é”替换为“e”等等,但她告诉我有更好的解决方案并让我考虑一下。到目前为止我唯一注意到的是重音符在扩展的 ASCII 代码中,所以 > 127,但我似乎无法理解该怎么做。有人能帮我吗?即使只是提示,我们也将不胜感激,提前致谢。

最佳答案

您将不得不像 Alain Merigot 建议的那样使用查找表对此进行硬编码。如何执行此操作取决于您的字符串编码方案(ASCII 与 UTF-8 等)

对于 ASCII,我做了这个,它应该可以工作:

.data

ascii_strip_accent_table:
# index: U+nnnn offset, minus 128
.space 0x40 ;table doesn't really start until U+00C0
.ascii "AAAAA"
.byte 0xC6
.ascii "C"
.ascii "EEEE"
.ascii "IIII"
.ascii "D"
.ascii "N"
.ascii "OOOOO" ;these are capital Os, not zeroes
.byte 0xD7
.ascii "O" ;this is a capital O, not a zero
.ascii "UUUU"
.ascii "Y"
.byte 0xDE,0xDF
.ascii "aaaaa"
.byte 0xE6
.ascii "c"
.ascii "eeee"
.ascii "iiii"
.ascii "d"
.ascii "n"
.ascii "ooooo"
.byte 0xF7
.ascii "o"
.ascii "uuuu"
.ascii "y"
.byte 0xFE
.ascii "y"

MyString:
.asciiz "Pokémon"
.text

la $a0,ascii_strip_accent_table
la $a1,MyString
li $t2,128

loop:
lbu $t0,($a1) # read from string
beqz $t0,done
bltu $t0,$t2,continue # if char < 128, skip
subu $t0,$t0,$t2 # subtract 128 to get array index
move $a2,$a0 # backup table base
addu $a2,$a2,$t0 # add array index to table base
lbu $t0,($a2) # load from table
sb $t0,($a1) # store in string
continue:
addiu $a0,$a0,1
j loop

done:
li $v0,10
syscall

编辑:现在如果你像我一样不能忍受不必要的填充,你实际上可以删除开头的 .space 40 如果你 la $a0,ascii_strip_accent_table- 64 代替。您是否愿意冒这个风险取决于您。

关于mips - 如何在 MIPS 中制作一个重音不敏感的回文检查器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56280030/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com