2010-11-04 1 views
2

Я пытаюсь написать программу, которая будет вводить строчные буквы, введенные с консоли, в алфавитном порядке. Он должен отбрасывать буквы верхнего регистра и любые не буквенно-цифровые символы. Это то, что у меня есть до сих пор. Он работает нормально, но мне все же нужно реализовать код для удаления прописных и не буквенно-цифровых символов. Любые идеи о том, как я могу реализовать это в этой программе? Благодаря!MIPS отбрасывает прописные или не буквенно-цифровые символы

О, и еще одна вещь. Когда я запускаю эту программу, так как она создает, например, новую строку для ответа.

Он должен сказать

Please type the letters: cba* 
The alphabetized string is: abc 

Вместо этого он говорит

Please type the letters: cba* 
The alphabetized string is: 
abc 

Во всяком случае здесь.

# $t0 -- Pointer to current spot in letters 
# $t1 -- Holds the "upstream compare character" 
# $t2 -- Holds the current character being analyzed 
# #t7 -- Pointer to the first character in string 
#### Data Segment #### 
.data 
letter_prompt: .asciiz "Please type the letters: " 
output_message: .asciiz "The alphabaetized string is: " 
inputString: .space 30 # space for input string 
     .text 
main: 
la $a0,letter_prompt #print prompt string 
li $v0,4 
syscall 
la $a0,inputString #read the input string 
li $a1,30  #at most 100 characters 
li $v0,8 
syscall 
la $t0,inputString 
la $t7,inputString 
j loop 
loop: 
lb $t1,0($t0)  #Load first two characters to be compared 
lb $t2,1($t0) 
beqz $t2, exit_loop  #if NULL, we are done 
blt $t1,0x61,no_change 
bgt $t1,0x7a,no_change 
ble $t1,$t2,no_change 
jal rev    #Characters not in correct order; go to reverse 
j loop   #Character in correct position; get next character 
no_change: addi $t0,$t0,1  #increment character 
j loop 
exit_loop: la $a0,output_message #output sorted string 
li $v0,4 
syscall 
li $v0,4 
la $a0,inputString 
syscall 
li $v0,10  #exit program 
syscall 

#Character reverse routine 
rev: 
sub $sp,$sp,4  #Store contents of $ra on the stack 
sw $ra,($sp)  #Decrement stack pointer. 
sb $t1,1($t0)  #Exchange two character positions 
sb $t2,0($t0) 
beq $t0,$t7,goBack #if at first position in the string, done 
sub $t0,$t0,1  #Decrement the letter pointer 
lb $t1,0($t0)  #Compare the letter to next "upstream" letter 
lb $t2,1($t0) 
ble $t1,$t2,goBack #If letter is properly placed, done 
jal rev   #Not done yet; move back another position 
goBack: 
addi $t0,$t0,1  #Reverse done; move back to current position 
lw $ra,($sp) 
addi $sp,$sp,4 
jr $ra 

Почему это так? Как получить его в обычном формате?

+0

Отступы 4 пробела вместо использования backticks для блоков кода (фактически, избегайте обратных сигналов в целом). Вы вставили много пустых строк, чтобы обратные строки были на отдельных строках, и вам может понадобиться/захочется переформатировать код после моего редактирования. – 2010-11-08 16:06:20

ответ

Смежные вопросы