【问题标题】:moving specific characters of a string to the end of it MIPS将字符串的特定字符移动到它的末尾 MIPS
【发布时间】:2015-06-03 11:40:31
【问题描述】:

我想知道如何将字符串中的某些类型的字符推到它的末尾,例如: 我有

.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  

提前感谢您的帮助

【问题讨论】:

  • 最简单的方法可能是为结果字符串设置一个单独的缓冲区。遍历原始字符串一次并将所有非数字复制到另一个缓冲区,然后再次遍历原始字符串并复制所有数字。
  • 可以,但我如何识别数字
  • 有没有办法不使用缓冲区,只处理字符串?
  • 遍历字符串,当你找到一个数字时,将它后面的所有字符向左移动一步,然后将数字放在末尾。

标签: string assembly character mips


【解决方案1】:

解决您的问题的一种简单方法是使用“bltu”(小于分支)来查看您正在查看的字符是小于 0 还是大于 9。如果它满足其中任何一个条件它不能是数字,因此将其推送到缓冲区。之后,你可以做同样的事情,但这次找到值在 0 到 9 之间的字符,并将它们推送到缓冲区(将数字添加到字符串的末尾)。

如果你不喜欢使用缓冲区,你可以只使用 shift 方法:遍历字符串,当你找到一个数字时(使用上述技术)你保存那个数字,然后遍历其余的字符串,将所有内容向左移动一个索引。到达末尾后,添加保存的数字。这样做,直到你走过你的弦的原始长度,瞧,你就完成了!

【讨论】:

  • 谢谢你我使用了没有缓冲区的方法,它有效
猜你喜欢
  • 1970-01-01
  • 2021-10-04
  • 1970-01-01
  • 1970-01-01
  • 2013-08-25
  • 2018-02-25
  • 1970-01-01
  • 2018-11-05
  • 2017-04-12
相关资源
最近更新 更多