RISOLTO Aiuto C

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.

Dradkol

Eretico
Utente Èlite
Messaggi
5,082
Reazioni
4,403
Punteggio
159
Salve, il mio problema consiste in un esercizio dove dovrei inserire in input una frase e poi verificare quante delle parole inserite hanno 3 lettere. So che dovrei usare strlen ma non mi ricordo la sintassi.
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{

    char frase[500];
    int i,k=0;
    int n;

    n=strlen(frase);





    printf("Inserisci una frase: \n");
    scanf("%s",frase);

    for(i=0;frase[i]!='\0';i++)
    {
        if(n==3)
        {
            k++;
        }
    }


    printf("\nLa lunghezza della frase: %d\n",i);
    printf("\nLe parole con 3 lettere sono: %d",k);



    return 0;
}
[code]
Ovviamente sbaglio il for. Potreste darmi una mano a ricordare come si utilizzava in modo corretto strlen.
--- i due messaggi sono stati uniti ---
up
 
Ultima modifica:
Un up a 2 ore dall'apertura del topic mi sembra eccessivo... :)

Perchè creare un array di char della dimensione di 100 elementi ed utilizzare strlen subito dopo? E' ovvio che non potrai ottenere la lunghezza della stringa, non essendo ancora stata inserita.
A quel punto il for potrebbe anche iniziare da 0 e terminare raggiunto l'N esimo elemento. Inoltre quel confronto all'interno del for è decisamente non corretto (per usare un eufemismo).

EDIT: un'ultima cosa: devi verificare che abbiano esattamente 3 caratteri, o almeno 3?
 
Un up a 2 ore dall'apertura del topic mi sembra eccessivo... :)

Perchè creare un array di char della dimensione di 100 elementi ed utilizzare strlen subito dopo? E' ovvio che non potrai ottenere la lunghezza della stringa, non essendo ancora stata inserita.
A quel punto il for potrebbe anche iniziare da 0 e terminare raggiunto l'N esimo elemento. Inoltre quel confronto all'interno del for è decisamente non corretto (per usare un eufemismo).

EDIT: un'ultima cosa: devi verificare che abbiano esattamente 3 caratteri, o almeno 3?

Intanto scusa per l'up e grazie per la risposta. L'esercizio vuole che trovo esattamente le parole con solo tre lettere. La sintassi purtroppo non me la ricordo.
 
Figurati. ;)

Non ti serve ricordare la sintassi. Per quanto riguarda le funzioni, se cerchi online trovi la documentazione. Il tuo utilizzo è corretto, ma se passi un array di 100 elementi vuoto, non puoi ottenere la lunghezza della stringa... questa funzione è da richiamare solo dopo l'input.
Ma in questo modo hai la lunghezza della stringa totale, di tutte le parole.

Hai più di una possibilità, ma la più semplice è probabilmente utilizzare strtok e considerare le parole separatamente. Conti i singoli caratteri, e se al termine i caratteri sono esattamente 3, allora incrementi un contatore.
 
Perfetto ho capito il discorso dell'array vuoto e hai ragione. E anche il resto del discorso ma il problema ( colpa mia che mi sono spiegato male ) é che una volta che dovrò confrontare le parole della frase non so come scrivere la sintassi. Per esempio
Codice:
For(i=0;i<n;i++){
if( max < array[i])
Max = array[i];
}
[code]
( una sintassi per trovare il max di un array di numeri )
Capito non saprei come scrivere per verificare se le parole contengono solo 3 lettere
 
Puoi semplicemente scannerizzare lettera per lettera della frase e memorizzarli temporaneamente in un buffer. Quando incontri uno spazio significa che la parola è terminata, a quel punto verifichi se la sua lunghezza è pari a 0. Se lo è aumenti il contatore, altrimenti passi alla prossima parola.
 
Puoi anche utilizzare variabile temporanea che verrà azzerata alla presenza di uno spazio; prima dell'azzeramento si verifica se è uguale a 3.
Tuttavia si dovrà considerare anche che l'ultima parola non avrà uno spazio al termine.

@Eduadie in realtà deve verificare che la parola inserita sia lunga esattamente 3 caratteri, e contare quindi quante sono queste parole.
 
Non ho letto esattamente il problema quindi in caso di errore chiedo venia.. comunque un'altra soluzione semplice sarebbe tokenizzare la frase di input in un array di stringhe e con un ciclo contare quante "celle" dell'array contengono 3 lettere.

EDIT: rileggendo le risposte ho visto che è praticamente quello che ha suggerito DispatchCode con la funzione strtok:rolleyes:
 
Ultima modifica:
Puoi anche utilizzare variabile temporanea che verrà azzerata alla presenza di uno spazio; prima dell'azzeramento si verifica se è uguale a 3.
Tuttavia si dovrà considerare anche che l'ultima parola non avrà uno spazio al termine.

@Eduadie in realtà deve verificare che la parola inserita sia lunga esattamente 3 caratteri, e contare quindi quante sono queste parole.
Certamente :D.
Errore di battitura ma il concetto era questo che hai detto.
 
Ok, ipotizzando che io usi la funzione strtok la sintassi nel mio caso sarebbe? Purtroppo il concetto è chiaro e a mio avviso anche facile ma il problema che questi sono linguaggi e se non si sa la sintassi, con i concetti e ragionamenti non ci fai nulla se poi non puoi trascriverli nel linguaggio correttamente. Qualcuno sarebbe cosi gentile da mostrarmi esattamente la funzione scritta nel mio caso con la funzione strtok ??
 
Cominciamo dal primo errore.
Devi leggere una intera frase, ossia una sequenza di caratteri fino al carattere di ritorno. Tu per leggere la frase usi scanf() con il formato %s, il problema è che quello legge solo una stringa fino al primo spazio. Non puoi usare scanf(), devi usare un’altra istruzione che legge tutta una frase fino al ritorno. Ti diamo un po’ di tempo per trovarla.
 
No, getchar prende in input, come dice il nome stesso, un solo carattere. Dovresti usare fgets, il cui prototipo è char *fgets(char *s, int size, FILE *stream); dove s altro non è che l'array, size indica il numero di caratteri da leggere prima di fermarsi (sono letti al più size-1 caratteri, va infatti aggiunto il terminatore) e lo stream rappresenta la sorgente dell'input, nel tuo caso dal momento che l'input avviene da tastiera è stdin.
La funzione fgets a differenza di scanf non smette di leggere dallo stream quando incontra uno spazio. Si ferma invece quando incontra un carattere di newline, però attenzione perché quest'ultimo è incluso nella stringa. (se dovesse risultare fonte di errore sarebbe sufficiente sostituirlo con un carattere di terminazione '\0').

Tuttavia si dovrà considerare anche che l'ultima parola non avrà uno spazio al termine.
Non vorrei sbagliare ma credo che strtok consideri i caratteri di terminazione alla stregua dei delimitatori.
 
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top