Здравствуйте, у меня есть программа, которая будет располагать в алфавитном порядке строку из 20 символов, которую вводит пользователь, а также отфильтровывать символы, не являющиеся строчными буквами. У меня есть программа, занимающая алфавитное положение с рекурсивным циклом, а затем есть более простой фильтр, настроенный для отсеивания символов, которые не являются буквами нижнего регистра. Я могу заставить программу правильно расположить по алфавиту и отфильтровать символы, как только это произойдет, программа спросит, хочет ли пользователь повторить попытку. Здесь я сталкиваюсь с проблемой, когда предыдущая строка длиннее, чем последующая, остаются распечатанные символы.
Например, если первая строка расположена в алфавитном порядке до abcdefgxyz, а вторая должна быть только abcdefg, на выходе все равно будет отображаться xyz.
Любая помощь будет оценена!
Вот мой код
.text
main: la $a0, prompt
li $v0, 4
syscall
la $a0, input
li $a1, 21
li $v0, 8
syscall
la $t0, input
la $t7, input
la $t5, final
loop: lb $t1, 0($t0)
lb $t2, 1($t0)
ble $t1, $t2, incr
beqz $t2, filter
jal swap
j loop
incr: addi $t0, $t0, 1
j loop
filter: lb $t3, 0($a0)
blt $t3, 0x61, next
bgt $t3, 0x7a, next
sb $t3, 0($t5)
add $t5, $t5, 1
next: beqz $t3, output
addi $a0, $a0, 1
j filter
output: la $a0, display
li $v0, 4
syscall
la $a0, final
syscall
la $a0, again
syscall
li $v0, 12
syscall
beq $v0, 0x79, clr
j end
clr: li $a0, 0x0a
li $v0, 11
syscall
j main
end: la $a0, termin
li $v0, 4
syscall
li $v0, 10
syscall
swap: sub $sp, $sp, 4
sw $ra, ($sp)
sb $t1, 1($t0)
sb $t2, 0($t0)
beq $t0, $t5, return
sub $t0, $t0, 1
lb $t1, 0($t0)
lb $t2, 1($t0)
ble $t1, $t2, return
jal swap
return: addi $t0, $t0, 1
lw $ra, ($sp)
addi $sp, $sp, 4
jr $ra
.data
prompt: .asciiz "Please enter a string to alphabetize and filter: "
display:.asciiz "\nThe alphabetized and filtered string is: "
again: .asciiz "\nDo you want to try again (y for yes)? "
termin: .asciiz "\nProgram terminated."
input: .space 21
final: .space 21