Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Ciao a tutti, non sapevo dove scrivere la mia domanda perciò lo sto facendo qui..
ho scritto questo programma che, inserita un stringa, dovrebbe contare quante 'à' ci sono. Il problema è che non so come contare i caratteri accentati. Ho visto che nella tabella Ascii estesa 'à' corrisponde a 160 e il tutto funziona se la stringa la scrivo in memoria se invece la scrivo da tastiera non la legge. Ho visto che in quest'ultimo caso nei registri la 'à' corrisponde a 10 ma non penso sia molto corretto scrivere come nel modo che ho commentato mettendo di trovare appunto 10....
Quindi sono andato a guardare la tabella di Unicode dove però ogni carattere corrisponde a 2 byte quindi ho dovuto utilizzare la direttiva .halfword..ma sbaglio qualcosa e non funziona. qualcuno può aiutarmi a risolvere questo problema?
Inoltre, se la stringa che inserisco dovesse contente "Buongiorno a tutti" come faccio a trovare la parola più lunga nella stringa?
Codice sorgente - presumibilmente VB.NET
.text
.globl main
main:
la $a0, richiesta
li $v0, 4
syscall
la $a0, STRINGA
li $v0,8
syscall
li $s0,0
la $t0, STRINGA# punta al buffer che contiene la stringa acquisita
lhu $t3,char
#lbu $t3,char
loop:
lbu $a0, ($t0)#carico un byte alla volta
beqz $a0, fine#se è 0 è il terminatore della stringa
beq $a0,$t3,trovata
addi $t0,$t0,1# punta al carattere (byte) successivo della stringa
j loop
trovata:
add $s0,$s0,1# aggiorna contatore vocali
addi $t0,$t0,1# punta al carattere (byte) successivo della stringa
j loop
fine: la $a0, risultato
li $v0, 4
syscall
li $v0,1
move $a0,$s0# passa il numero di vocali totali alla syscall
La parola più lunga si trova contando il numero di caratteri prima dello spazio successivo e tenendo il puntatore al carattere iniziale della parola.
Dove stai fisicamente eseguendo il programma? Un emulatore o un pc linux con CPU MIPS?
Per quanto riguarda trovare la parola più luna nella stringa ho risolto in questo modo
Codice sorgente - presumibilmente Tutto e di +
.text
.globl main
main:
la $t2, stringa#carico in t2 l'indirizzo della stringa
la $s3, massimo
li $t3, 0#massimo
li $t1, 0#contatore caratteri
ciclo:
lbu $t0, ($t2)
beq $t0, 32, salta
beq $t0,$zero,fine_stringa
addu $t1,$t1,1
addu $t2, $t2,1
j ciclo
salta:
sltu $t5, $t1, $t3 #se il numero è minore del massimo allora $t5 è uguale ad 1
beqz $t5, nuovo
#se è maggiore del massimo t1 diventa il nuovo massimo cioè t3
li $t1, 0
addu $t2, $t2,1
j ciclo
nuovo:
move $t3, $t1
li $t1, 0
addu $t2, $t2,1
j ciclo
fine_stringa:
sltu $t5, $t1, $t3
beqz $t5, nuovo_fine
j fine
nuovo_fine:
move $t3, $t1
j fine
fine:
sb $t3, ($s3)
li $v0, 10
syscall
.data
stringa: .asciiz "ciao a tutti"
massimo:
dovrebbe essere giusto?
Il mio problema è proprio con i caratteri accentati, se uso Ascii esteso non me li stampa e unicode non so come usarlo,.... inoltre usando ascii esteso me li conta come due caratteri e non come uno solo (per esempio guardando i registri vedo che la à corrisponde a byte 95 e poi byte 160 invece che solo byte 160)