2012-04-18 7 views
1

ユーザーが入力した文字を再帰を使用して右のアルファベット順の文字列に挿入し、別の文字を要求する必要があります。一度に入力できる文字は1文字だけです。再帰を使用して文字を文字列に挿入しますか? (MIPS)

文字列をスキャンするのが良い方法だと思っていました。入力された文字列がアルファベット文字列の中の文字列と一致すると、その文字列を挿入します。しかし、私はそれをコードに入れるのに問題があります。私も再帰(スタック、$ jal、$ jr $ ra)を使用する必要がありますが、私はそのようにそれを使用する方法に完全に慣れていません。ここで

は、これまでの私のコードです:

 .data 

    str: .asciiz "abcdefghijklmnopqrstuvwxyz .space 30" 
    input: .asciiz "Please input a letter: " 
    error1: .asciiz "Error! Please only enter one lowercase letter!" 
    print1: .asciiz "The string is: " 


    .text 

    main: 
    la $s0,0 
    li $v0,4 
    la $a0,input 
    syscall 

    loop: 
    li $v0,8 
    syscall 
    move $t0,$v0 
    blt $t0,61,error #if less than a 
    bgt $t0,80,error #if more than z 
    bge $t0,0x50,print #when user enters P, print 

    loop2: 
    lb $t2,str($s0) #load first byte of string 
    bge $t0,$t2,store #if input char=string char, store it 
    addi $s0,$s0,1 #next char in string 
    j loop 

    store: 
    sw $t0,str($s0) #store char in string 
    addi $s0,$s0,1 #next char in string 
    j loop 

    error: 
    li $v0,4 
    la $a0,error1 #print error message 
    syscall 
    j loop #jump back to loop 

    print: 
    li $v0,4 
    la $a0,print1 #print dialogue 
    syscall 
    li $v0,4 
    la $a0,str #print string 
    syscall 

答えて

1

何かに取り組む前に、この挿入が動作するようになっているかを正確に明確にする必要があります。あなたはキャラクターを取ってそれを既存のストリングに挿入しなければなりませんか?もしそうなら、それは文字列でいっぱいになった変更可能なバッファを作成する必要があることを意味します。 .spaceディレクティブが行います。さらに、文字を挿入するので大きなバッファを割り当てる必要があります。最後に、文字を挿入することはシフトを意味するので、そのために自分自身を準備してください。

現在、あなたが持っている:

str: .asciiz "abcdefghijklmnopqrstuvwxyz" 

私はあなたがその文字列を変更しようとしていることを推測しているが、文字列の宣言を変更することを意味するものではありません。あなたはおそらくそれを修正してプログラムを動作させることもできますが、そのようにすることはお勧めしません。複数の文字列を宣言すると、それが連続して配置され、データを上書きしてしまう可能性があります。私はユーザーに入力を求めようとする前にすべての問題を解決することに集中します。

その後、次のしている:

loop: 
    li $v0,8 
    syscall 
    move $t0,$v0 

syscall 8文字列ではなく、文字を読み込みます。 syscall 12は文字を読み取ります。また、コンソールから文字列を読み込もうとしたときに、$a0にバッファアドレスを指定していませんでした。次に、システムコールの結果を一時レジスタに移動しようとしますが、呼び出しは何も返しません。これは、入力文字列をバッファに入れるだけです。

関連する問題