Contare il numero di lettere minuscole di una stringa

di il
15 risposte

Contare il numero di lettere minuscole di una stringa

Ciao, ho scritto un programma in cui devo contare le lettere minuscole di una stringa, solo che alla fine non riesco a visualizzare il numero di lettere minuscole. Non capisco in cosa sbaglio in questo programma. Qualcuno riesce a capire in quale errore banale mi sto perdendo in questo momento?

#include<stdio.h>

int main(){

	char a[255] = "CIAO Mamma";
	int risultato;
	char *b;
	b = &a[0];


	__asm{

		mov ebx, b
		mov esi, 0

		
	ciclo:
			mov al, byte ptr[ebx + esi]
			cmp al, 0			
			je fine

			
			cmp al, 97				
			jl salto				
			cmp al, 122
			jg salto

			
			

		salto:
			inc esi
			jmp ciclo
		fine:
			mov risultato, esi
	}

	printf("Il numero di caratteri e' : %d", risultato);

}







15 Risposte

  • Re: Contare il numero di lettere minuscole di una stringa

    Manca un registro che conti solo le minuscole

    Il registro esi serve a contare e accedere a tutte le lettere
  • Re: Contare il numero di lettere minuscole di una stringa

    Ah, ora ho capito..
    
    
    cmp al, 97				
    jl salto				
    cmp al, 122				
    jg salto
    inc edi		
    
    
    
    
    
    
    dovevo incrementare un altro registro subito successivamente, cosi oltre a contare il numero di caratteri della mia stringa, riesco a contare contemporaneamente il numero di lettere minuscole
  • Re: Contare il numero di lettere minuscole di una stringa

    In realtà ti rammento che puoi controllare direttamente il sesto bit, invece di fare un doppio controllo "maggiore" e "minore".
  • Re: Contare il numero di lettere minuscole di una stringa

    +m2+ ha scritto:


    In realtà ti rammento che puoi controllare direttamente il sesto bit, invece di fare un doppio controllo "maggiore" e "minore".
    Sei sicuro...?
    include \masm32\include\masm32rt.inc
    .data?
    risultato   dd ?
    
    .code
    start:
      mov ebx, chr$("CIAO Mammina, è già pronta la pasta?")		; 29-6=23
      xor esi, esi
      molto_sbagliato=0
      un_po_sbagliato=0
      ciclo:
      mov al, byte ptr[ebx + esi]
      test al, al
      je fine
      if molto_sbagliato	; risultato 31, sbagliato
    	test al, 32
    	je salto
      else
    	cmp al, "a"  	 ; 97
    	jb salto
    	if un_po_sbagliato	; risultato 21, mancano è + à
    		cmp al, "z"   	; 122
    		ja salto
    	else		; risultato 23, corretto
    		shr al, 6
    		jnc salto
    	endif
      endif
      inc risultato
      salto:
      inc esi
      jmp ciclo
    
    fine:
      print str$(risultato), " caratteri minuscoli fra un totale di "
      inkey str$(esi), " caratteri"
      exit
    end start
    Output:
    23 caratteri minuscoli fra un totale di 36 caratteri
    @Matte: Studia bene perché ho cambiato il jl salto a jb salto.
  • Re: Contare il numero di lettere minuscole di una stringa

    jj2007 ha scritto:


    +m2+ ha scritto:


    In realtà ti rammento che puoi controllare direttamente il sesto bit, invece di fare un doppio controllo "maggiore" e "minore".
    Sei sicuro...?
    Abbastanza. Tu no?
  • Re: Contare il numero di lettere minuscole di una stringa

    +m2+ ha scritto:


    jj2007 ha scritto:


    +m2+ ha scritto:


    In realtà ti rammento che puoi controllare direttamente il sesto bit, invece di fare un doppio controllo "maggiore" e "minore".
    Sei sicuro...?
    Abbastanza. Tu no?
    Non per qualsiasi carattere possa esserci nella stringa ... (a meno che non limiti quelle che possono essere presenti, ma non mi sembra ci fossero queste premesse ...)

    Prendi lo SPAZIO, ad esempio ...
  • Re: Contare il numero di lettere minuscole di una stringa

    Matte ha scritto:


    Ah, ora ho capito..
    
    
    cmp al, 97				
    jl salto				
    cmp al, 122				
    jg salto
    inc edi		
    
    
    
    
    
    
    dovevo incrementare un altro registro subito successivamente, cosi oltre a contare il numero di caratteri della mia stringa, riesco a contare contemporaneamente il numero di lettere minuscole
    Naturalmente devi azzerare edi all'inizio ...
  • Re: Contare il numero di lettere minuscole di una stringa

    oregon ha scritto:


    Matte ha scritto:


    Ah, ora ho capito..
    
    
    cmp al, 97				
    jl salto				
    cmp al, 122				
    jg salto
    inc edi		
    
    
    
    
    
    
    dovevo incrementare un altro registro subito successivamente, cosi oltre a contare il numero di caratteri della mia stringa, riesco a contare contemporaneamente il numero di lettere minuscole
    Naturalmente devi azzerare edi all'inizio ...
    sisi certamente, grazie mille!
  • Re: Contare il numero di lettere minuscole di una stringa

    Matte ha scritto:


    jl salto
    jl non funziona, vedi la mia risposta delle 17:55. Per gli inglesi sì, per italiani no.
  • Re: Contare il numero di lettere minuscole di una stringa

    jj2007 ha scritto:


    Matte ha scritto:


    jl salto
    jl non funziona, vedi la mia risposta delle 17:55. Per gli inglesi sì, per italiani no.
    Direi che deve usare

    jb e ja

    dato che opera su unsigned

    (ma quella degli inglesi/italiani non l'ho capita) ...
  • Re: Contare il numero di lettere minuscole di una stringa

    oregon ha scritto:


    jl salto
    Direi che deve usare

    jb e ja

    dato che opera su unsigned

    (ma quella degli inglesi/italiani non l'ho capita) ...
    Se hai una stringa "italiana" tipo "CIAO Mammina, è già pronta la pasta?", ci trovi dei caratteri >127, come è e à. Quindi il jl salto fallisce. L'alfabeto inglese non ha questo problemino.
  • Re: Contare il numero di lettere minuscole di una stringa

    Ah ... ok ... non pensavo alla lingua della frase ...

    Comunque, oltre alla jb, per lo stesso motivo, è necessaria la ja
  • Re: Contare il numero di lettere minuscole di una stringa

    oregon ha scritto:


    Ah ... ok ... non pensavo alla lingua della frase ...

    Comunque, oltre alla jb, per lo stesso motivo, è necessaria la ja
    Sarebbe necessaria, se ci fosse un limite alto tipo "z" - ma la soluzione migliore e corretta è questa (vedi sopra):
          shr al, 6
          jnc salto
    Così funzionano anche à è ì ò ù ecc
  • Re: Contare il numero di lettere minuscole di una stringa

    jj2007 ha scritto:


    ma la soluzione migliore e corretta è questa ..
    Non per frasi del tipo

    "{par 1} L'acqua per la pasta bolle a 100 °C"

    Insomma ... sul codice "migliore e corretto" ci sarebbe tanto da dire ... l'OP si può accontentare del suo, considerando che è un esercizio ...
Devi accedere o registrarti per scrivere nel forum
15 risposte