我目前正在尝试编写一个代码,该代码接收一个字符串并输出相同的字符串,不带空格。我的代码中的所有内容当前都有效,但输出不会删除字符串的先前值。例如,如果输入是“jack and jill上山”,则输出为“jackandjillranupthehill hill”。似乎我的字符串仍然坚持旧值。有谁知道为什么这样做以及如何解决它?
.data
string1: .space 100
string2: .space 100
ask: .asciiz "Enter string: "
newstring: .asciiz "New string:\n"
.text
main:
la $a0,ask #ask for string1
li $v0,4
syscall
#load String1
la $a0,string1
li $a1, 100
li $v0,8 #get string
syscall
load:
la $s0,string1 #Load address of string1 into s0
lb $s1, ($s0) #set first char from string1 to $t1
la $s2 ' ' #set s2 to a space
li $s3, 0 #space count
compare:
#is it a space?
beq $s1, $zero, print #if s1 is done, move to end
beq $s1, $s2, space #if s1 is a space move on
bne $s1, $s2, save #if s1 is a character save that in the stack
save:
#save the new string
sub $s4, $s0, $s3,
sb $s1, ($s4)
j step
space:
addi $s3, $s3, 1 #add 1 if space
step:
addi $s0, $s0, 1 #increment first string array
lb $s1, ($s0) #load incremented value
j compare
print:
#tell strings
la $a0, newstring
li $v0,4
syscall
#print new string
la $a0, string1
li $v0, 4
syscall
end:
#end program
li $v0, 10
syscall #end
答案 0 :(得分:0)
字符串NULL
已终止,您应该将终止NULL
的字符串移动到字符串的新结尾。
另一方面,你可以做到整个事情(为了方便C代码:)
#include <stdio.h>
int main() {
char string1[100];
fgets (string1, 100, stdin);
char *inptr = string1; //could be a register
char *outptr = string1; //could be a register
do
{
if (*inptr != ' ')
*outptr++ = *inptr;
} while (*inptr++ != 0); //test if the char was NULL after moving it
fputs (string1, stdout);
}
答案 1 :(得分:0)
这是从sting中移除空格并将其打印回来的另一种方法。简单地循环字符串并忽略空格。
.text
main:
li $v0, 4
la $a0, prompt
syscall
li $v0, 8
la $a0, input
li $a1, 100
syscall
move $s0, $a0
loop:
lb $a0, 0($s0)
addi $s0, $s0, 1
beq $a0, 32, loop
beq $a0, $zero, done
li $v0, 11
syscall
j loop
done:
jr $ra
.data
prompt: .asciiz "Enter a string: "
input: .space 100