Trovare la parola più lunga in una frase

di il
2 risposte

Trovare la parola più lunga in una frase

Ciao a tutti sto cercando di risolvere un problema; devo trovare la parola più lunga in una frase e stamparla, ma nel codice che ho fatto mi stampa solo la prima parola. Il codice ha una parte in C e il blocco __asm. Immagino di dover controllare ogni carattere e aumentare ecx ad ogni lettera e bloccarlo nel momento in cui trovo un segno di punteggiatura o uno spazio.

Solo non riesco a capire come confrontare le varie lunghezze e memorizzare la parola in ‘parolaMax’.

#include <stdio.h>
#include <string.h>

void main()
{
#define MAX_LEN 100
    char frase[MAX_LEN] = "Cantami o diva del pelide Achille";
    char parolaMax[MAX_LEN + 1];
    __asm
    {
        xor esi, esi; ESI conterrà l'indirizzo della stringa
        xor ecx, ecx; ECX conterrà la lunghezza della parola
        xor edx, edx; EDX conterrà la lunghezza massima trovata
        lea esi, frase
        // Ciclo per trovare la parola più lunga
        ciclo :
        mov al, [esi]; Carica il carattere corrente nella parola
            cmp al, 0; Controlla se siamo arrivati alla fine della stringa
            je fine; Se si, salta alla fine

            cmp al, ' '; Controlla se il carattere è uno spazio
            je spazio; Se si, salta alla gestione dello spazio

            cmp al, '.'; Controlla se il carattere è un punto
            je spazio; Se si, salta alla gestione dello spazio

            cmp al, ','; Controlla se il carattere è una virgola
            je spazio; Se si, salta alla gestione dello spazio

            cmp al, ';'; Controlla se il carattere è un punto e virgola
            je spazio; Se si, salta alla gestione dello spazio

            cmp al, ':'; Controlla se il carattere è due punti
            je spazio; Se si, salta alla gestione dello spazio

            cmp al, '\''; Controlla se il carattere è un apostrofo
            je spazio; Se si, salta alla gestione dello spazio

            cmp al, '?'; Controlla se il carattere è un punto interrogativo
            je spazio; Se si, salta alla gestione dello spazio

            jmp carattere; Se non è uno spazio o un segno di punteggiatura, salta al controllo del carattere

            spazio :
        mov byte ptr[parolaMax + ecx], 0; Termina la parola corrente
            cmp edx, ecx; Confronta la lunghezza attuale con la lunghezza massima trovata
            jge no_aggiornamento; Se la lunghezza attuale è minore o uguale alla lunghezza massima, salta all'aggiornamento della parola più lunga

            mov edx, ecx; Aggiorna la lunghezza massima trovata
            lea esi, parolaMax; Aggiorna l'indirizzo della parola più lunga
            jmp aggiorna_parola; Salta all'aggiornamento della parola più lunga

            carattere:
        mov byte ptr[parolaMax + ecx], al; Salva il carattere nella parola corrente
            inc ecx; Incrementa la lunghezza della parola
            jmp prossimo_carattere; Salta al prossimo carattere

            prossimo_carattere :
        inc esi; Passa al prossimo carattere nella frase
            jmp ciclo

            no_aggiornamento :
        cmp ecx, edx; Confronta la lunghezza attuale con la lunghezza massima trovata
            jge ciclo; Se la lunghezza attuale è maggiore o uguale alla lunghezza massima, ritorna al ciclo principale
            jmp aggiorna_parola; Salta all'aggiornamento della parola più corta

            aggiorna_parola:
        mov[parolaMax + edx], 0; Termina la parola più lunga

            fine :
    }


    // Stampa su video
    printf("%s\n%s\n", frase, parolaMax);
} 

2 Risposte

Devi accedere o registrarti per scrivere nel forum
2 risposte