Domanda

Sto creando un programma che segue determinate regole di provocare un conteggio delle parole, sillabe e frasi in un dato file di testo.

Una frase è un insieme di parole separate da spazi bianchi che termina in una. o ! o ? Tuttavia, questo è anche una frase:

Greetings, earthlings..

Il modo in cui ho affrontato questo programma è quello di eseguire la scansione attraverso il file di testo un carattere alla volta utilizzando getchar (). Mi viene proibito di lavorare con il l'intero file di testo in memoria, deve essere un carattere o una parola alla volta.

Ecco il mio dilemma: con getchar () posso scoprire che cosa il carattere corrente è. Ho appena continuo ad usare getchar () in un ciclo finché non trova il carattere EOF. Ma, se la frase ha più periodi, alla fine, è ancora una sola frase. Il che significa che ho bisogno di sapere che cosa l'ultimo carattere era prima quella che sto analizzando, e quello dopo. Attraverso il mio pensiero, questo significherebbe un'altra chiamata getchar (), ma che avrebbe creato problemi quando vado per la scansione nel carattere successivo (la sua ormai saltato un carattere).

Qualcuno ha un suggerimento su come ho potuto stabilire che la frase di cui sopra, è davvero una frase?

Grazie, e se avete bisogno di chiarimenti o qualsiasi altra cosa, fatemelo sapere.

È stato utile?

Soluzione

Hai solo bisogno di implementare un semplice macchina statale . Una volta che hai trovato la fine di una frase si rimane in quello stato fino a trovare l'inizio di una nuova frase (normalmente questo sarebbe un carattere di spazio non-bianco diverso da un terminatore, come.! O?).

Altri suggerimenti

Hai bisogno di una grammatica estensibile. Guarda ad esempio le espressioni regolari e cercare di costruire uno.

In generale il linguaggio umano è vario e non facile da interpretare, soprattutto se si dispone di linguaggio colloquiale per analizzare o lingue diverse. In alcune lingue si può anche non essere chiaro quale sia la distinzione tra una parola e una frase è .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top