如何解决如何在打印字符串时删除换行符
.data
.align 2
array: .space 80
size: .word 20
string: .space 20000
arrayLength: .asciiz "Enter the array length : "
input: .asciiz "Enter string : "
result: .asciiz "\nString Array = { "
cls: .asciiz "}"
space: .asciiz " "
.text
main:
li $v0,4
la $a0,arrayLength
syscall
li $v0,5
syscall
addi $s0,$v0,0
add $t0,$zero,$zero
addi $t1,1
la $s2,string
read_String:
bgt $t1,$s0,L1
li $v0,input
syscall
move $a0,$s2
li $a1,20
li $v0,8
syscall
sw $a0,array($t0)
addi $t0,$t0,4
addi $t1,$t1,1
addi $s2,$s2,20
j read_String
L1:
add $t0,$zero
addi $t1,1
la $a0,result
li $v0,4
syscall
while:
bgt $t1,done
lw $t2,array($t0)
li $v0,4
move $a0,$t2
syscall
addi $t0,4
addi $t1,1
j while
done:
li $v0,cls
syscall
li $v0,10
syscall
解决方法
MARS & QTSPIM 系统调用 #8 读取一个字符串,但这包括用户用来结束字符串输入的新行。此系统调用还会附加一个 NUL 字符“\0”,以使输入的字符串成为 C 风格的空终止字符串。
如果不希望用户输入字符串时捕获的换行符,则必须自己将其删除。最简单的做法是用 NUL 覆盖输入字符串中的 '\n' 字符,删除新行并将字符串缩短 1。
由于系统调用 #8 不返回长度(您可以从中返回 1 以定位换行符),您必须通过逐字节搜索来定位换行符。当你发现它用 0 覆盖它以终止那里的字符串。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。