如何在打印字符串时删除换行符

How to remove Newline while printing string

.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,$zero,1
    la  $s2,string

read_String:
    bgt $t1,$s0,L1
    
    li  $v0,4
    la  $a0,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,$zero     
        addi    $t1,$zero,1         

        la      $a0,result
        li      $v0,4
        syscall
        
while:
        bgt     $t1,$s0,done        
        lw      $t2,array($t0)      

        li      $v0,4
        move    $a0,$t2
        syscall

        addi    $t0,$t0,4         
        addi    $t1,$t1,1          
        j       while

done:
    li  $v0,4
    la  $a0,cls
    syscall

        li      $v0,10
        syscall

MARS & QTSPIM 系统调用 #8 读取了一个字符串,但其中包括用户用来结束字符串输入的新行。此系统调用还附加一个 NUL 字符“\0”,使输入的字符串成为 C 风格的空终止字符串。

如果您不想在用户输入字符串时捕获换行符,您必须自己将其删除。最简单的做法是用 NUL 覆盖输入字符串中的 '\n' 字符,删除新行并将字符串缩短 1.

因为系统调用 #8 没有 return 长度(您可以返回 1 来定位换行符),您必须通过逐字节搜索来定位换行符.当您找到它时,用 0 覆盖它以终止那里的字符串。