将字符串的特定字符移动到 MIPS 的末尾
moving specific characters of a string to the end of it MIPS
我想知道如何将字符串中的某些类型的字符推到字符串的末尾,例如:
我有
.data
string: .asciiz "H3LL0 W0RLD"
我想用一个循环扫描字符串,如果遇到一个数字,它会被放在最后一个位置,所以输出将是 "HLL WRLD300"
我已经完成了字符串长度的编码,我也知道如何扫描每个字符,但我似乎无法识别数字并将其推到最后。
这是字符串长度的代码:
length:
li $v0, 0
lbu $t1, ($a0)
for:
beqz $t1, end_for
addi $v0, $v0, 1
addi $a0, $a0, 1
lbu $t1, ($a0)
j for
end_for:
jr $ra
提前感谢您的帮助
解决问题的一个简单方法是使用 "bltu"(分支小于)来查看您正在查看的字符是否小于 0 或大于 9。如果满足这些条件中的任何一个都不能是数字,因此将其推送到缓冲区。之后,您可以做同样的事情,但这次找到值介于 0 和 9 之间的字符,并将它们推送到您的缓冲区(将数字添加到字符串的末尾)。
如果您不热衷于使用缓冲区,您可以只使用移位方法:遍历字符串,当您找到一个数字(使用上述技术)时,您保存该数字,然后遍历其余数字字符串,将所有内容向左移动一个索引。到达终点后,您添加保存的数字。一直这样做,直到您走完字符串的原始长度,瞧,大功告成!
我想知道如何将字符串中的某些类型的字符推到字符串的末尾,例如: 我有
.data
string: .asciiz "H3LL0 W0RLD"
我想用一个循环扫描字符串,如果遇到一个数字,它会被放在最后一个位置,所以输出将是 "HLL WRLD300"
我已经完成了字符串长度的编码,我也知道如何扫描每个字符,但我似乎无法识别数字并将其推到最后。
这是字符串长度的代码:
length:
li $v0, 0
lbu $t1, ($a0)
for:
beqz $t1, end_for
addi $v0, $v0, 1
addi $a0, $a0, 1
lbu $t1, ($a0)
j for
end_for:
jr $ra
提前感谢您的帮助
解决问题的一个简单方法是使用 "bltu"(分支小于)来查看您正在查看的字符是否小于 0 或大于 9。如果满足这些条件中的任何一个都不能是数字,因此将其推送到缓冲区。之后,您可以做同样的事情,但这次找到值介于 0 和 9 之间的字符,并将它们推送到您的缓冲区(将数字添加到字符串的末尾)。
如果您不热衷于使用缓冲区,您可以只使用移位方法:遍历字符串,当您找到一个数字(使用上述技术)时,您保存该数字,然后遍历其余数字字符串,将所有内容向左移动一个索引。到达终点后,您添加保存的数字。一直这样做,直到您走完字符串的原始长度,瞧,大功告成!