You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MIPS汇编程序编写求助:移除句子中首字符非小写的单词

MIPS汇编单词过滤功能实现指南

你提供的需求描述与示例输出不匹配:若按“删除首字符非小写的单词”执行,输入Today is A great Day的输出应为is great,但你给出的预期输出为Today A Day,因此下文默认按删除首字符为小写的单词、保留首字符大写的单词的逻辑实现。

可行实现步骤

  • 配置两个指针:读指针遍历原始输入字符串,写指针记录过滤后内容的写入位置,可直接复用原输入缓冲区节省空间
  • 新增单词首字符标记位:标记当前遍历到的字符是否为某个单词的第一个字符,只有首字符需要判断过滤规则
  • 遍历逻辑:
    1. 遇到空格直接写入结果,同时标记下一个字符为新单词的首字符
    2. 遇到单词首字符时,判断是否符合保留规则:符合则写入结果,标记后续字符无需判断,继续遍历;不符合则直接跳过整个单词,直到遇到下一个空格或字符串结束
    3. 非首字符直接写入结果即可
  • 遍历结束后在结果末尾补字符串结束符,输出结果

现有代码问题修正

  • 原循环判断逻辑倒置:原代码判断索引小于30时直接退出,需改为索引小于30时进入循环逻辑
  • 缺少写指针、首字符标记位的初始化与维护逻辑

完整可运行代码

.data
input .space 30
prompt: .asciiz "Please enter a sentence: "
output_prompt: .asciiz "Processed result: "

.text
# 输出提示
li $v0,4
la $a0,prompt
syscall

# 读取用户输入
li $v0,8
li $a1,30
la $a0,input
syscall

# 初始化寄存器
la $t0, input       # $t0 = 读指针
la $t6, input       # $t6 = 写指针
li $t7, 1           # $t7 = 首字符标记,1表示当前是单词首字符
li $t8, 10          # $t8 = 换行符ASCII,用于判断输入结束
li $t9, 32          # $t9 = 空格ASCII

loop:
lb $t4, 0($t0)      # 加载当前读指针指向的字符
beq $t4, $t8, end_process # 遇到换行符结束处理
beqz $t4, end_process     # 遇到结束符结束处理

beq $t4, $t9, handle_space # 当前字符是空格,跳转空格处理
bne $t7, 1, write_char     # 不是首字符,直接写入

# 是单词首字符,判断是否为大写字母(A~Z ASCII 65~90)
slti $t2, $t4, 65
bne $t2, $zero, skip_word  # 小于A,跳过整个单词
slti $t2, $t4, 91
beq $t2, $zero, skip_word  # 大于Z,跳过整个单词

# 首字符符合要求,写入,标记非首字符
sb $t4, 0($t6)
addi $t6, $t6, 1
li $t7, 0
addi $t0, $t0, 1
j loop

handle_space:
# 空格写入结果,标记下一个是首字符
sb $t4, 0($t6)
addi $t6, $t6, 1
li $t7, 1
addi $t0, $t0, 1
j loop

write_char:
# 非首字符直接写入
sb $t4, 0($t6)
addi $t6, $t6, 1
addi $t0, $t0, 1
j loop

skip_word:
# 跳过整个单词,直到遇到空格或结束
lb $t4, 0($t0)
beq $t4, $t9, handle_space
beq $t4, $t8, end_process
beqz $t4, end_process
addi $t0, $t0, 1
j skip_word

end_process:
# 给结果加结束符
sb $zero, 0($t6)

# 输出结果
li $v0,4
la $a0, output_prompt
syscall
li $v0,4
la $a0, input
syscall

EXIT:
li $v0,10
syscall

内容的提问来源于stack exchange,提问作者Robo Jumble

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 10:24:07