2017-06-17 7 views
0

私は文章中の各単語を逆にする必要があるプログラムを持っています。 私は自分のプログラムをやったが、それぞれの単語と文を逆にしているが、その文を逆にしたくない。私は最終的に何をしたいのthats文全体ではなく、各単語を逆転するMIPS

My string: Razvan Balaci 
String print: navzaR icalaB

しかし、私のプログラムの版画:私のコードザッツ

 icalaB navzaR

.data 
string: .space 12 
reverso: .space 12 
menssagem: .asciiz "Enter in stringing, max 11 characters: " 

.text 
main: 

la $a0, menssagem  #calling opening menssagem 
li $v0, 4 
syscall 

li $v0, 8 
la $a0, string 
li $a1, 12 
syscall 

li $t1, 0 

bump: 
lbu $t0, string($t1) 
beqz $t0, stend 
addu $t1, $t1, 1 
j bump 

stend: 
li $t2, 0 
addi $t1, $t1 -1 

populate: 
blt $t1, $zero, done 
lb $t3, string($t1) 
sb $t3, reverso($t2) 
sub $t1, $t1, 1 
add $t2, $t2, 1 
j populate 

done: 
sb $zero, reverso($t2) #null terminate reverso 
li $v0, 4 
la $a0, reverso 
syscall 
li $v0, 10 
syscall 

たぶん私は、サブ文字列を実行する必要があります? ありがとうございます。助けるかもしれ

+0

単語はスペースで区切られています。使用するスペースと文字列(ヌル文字)の末尾を使用して、逆にすることができます。スペースを叩いてこのパートを逆にし、スペースをそのまま残してから最後の文字を押すまで、残りの文字列についてこれを実行します。 – Azeem

+0

@Azeemそれは素晴らしいヒントでしたが、私は助けが必要です、どこで実装するのですか? –

+0

お気に入りの言語でアルゴリズムを設計、実装、デバッグします。次に、同じアルゴリズムを実行するアセンブリ言語を入力します。そして、それはストロークやそのようなものを意味しないし、CやPythonなどの文字列を歩くこともありません。 –

答えて

0

いくつかのソリューションの概要:

-reserve小さなワードサイズのスペース(おそらく10〜20バイト)。

- 2つのスペース(元の文字列の場合は1つ、結果の場合は1つ)を置き換えます。

- 3つのスペースすべてに対する3つのポインタ。

原文(各文字のための)各反復で以下を実行することを指しポインタで-loop:現在の文字が空白や改行またはnullでない場合

  • 、ワードにその文字を入れますポインタを前方に進め、次の反復を開始します。
  • それ以外の場合(すなわち、文字が ''または '\ n'または '\ 0'の場合)、格納した単語を逆に繰り返して "結果" 文に挿入します最後の文字で)ポインタがスペースの先頭に戻るまで続けます。次に、 '\ n'または '\ 0'を追加して、 を読み込みます。

希望します。必要ならば、これよりもさらに効率的に行うことができます(例えば、 "結果"のスペースは実際には必要ありません)。

関連する問題