Manipolazione stringhe

di il
2 risposte

Manipolazione stringhe

Salve,

volevo sapere cosa sbaglio in questo codice

.data

prompt1: .asciiz	"Inserire massimo 20 caratteri (gli eccedenti non verranno considerati), non utilizzare alcuno spazio e utilizzare il newline per terminare l'inserimento\n\n"
answer: .asciiz		"Gli elementi seguenti ricorrono un numero dispari di volte\n\n"

myarray: .space 20 		#array di 20 char composti da 1 byte
countarray: .space 20 

.text
.globl main

main:

li $v0,4
la $a0,prompt1
syscall

#Leggiamo direttamente 20 caratteri come stringa
	li $a1,20			# lunghezza massima
	la $a0,myarray		# indirizzo base array
	li $v0,8			# lettura stringa
	syscall
	li $t0,0			# inizializzo l-indice array
	li $s0,0			# inizializzo contatore elementi
	li $s1,-1			# valore neutro per l-array count
[b]inizializza:
	lb $t1, myarray($s0)      # $t1 = myarray[$t0]
	sb $s1,countarray($s0)	#	inizializza un elemento dell-array
	addi $s0,$s0,1	
	
	bne $t1, $zero, inizializza  # if $t1 != 0 goto inizializza (fine vettore raggiunta)[/b]
in pratica myarray e' una stringa letta da tastiera, l-errore piu che altro si cela nell'ultima parte in grassetto dove controllando meglio il ciclo non si ferma quando terminano i caratteri ma sembra fare ben due cicli in piu cosa sbaglio?

Un primo ciclo in piu sicuramente e' dovuto al posizionamento del confronto ma l'altro non capisco voi come risolvereste?

PS: non sapevo il grassetto non funzionasse in code, comunque e- la parte tra le due B del grassetto

2 Risposte

  • Re: Manipolazione stringhe

    Purtroppo il problema non è chiaro ... almeno non a chi ti legge ...

    Dopo l'input della stringa cosa dovrebbe succedere? Cosa non va esattamente?
  • Re: Manipolazione stringhe

    In pratica volevo sapere come si fa a scorrere una stringa e sapere dove termina

    Metti di leggere una stringa con una syscall.
    Ora vuoi scorrere la stringa e verificare quanti caratteri ha come si fa?
Devi accedere o registrarti per scrivere nel forum
2 risposte