000
26.09.2006, 17:27 Uhr
Xedosh
|
Hallo an alle,
ich habe dem klassischem C-Programmierlernbuch von Kernighan/Ritchie ein Beispiel für ein kleines Programm entnehmen können, das Wörter, Zeilen und Zeichen zählt und wie folgt aussieht:
C++: |
#include <stdio.h>
#define IN 1 /* in einem Wort */ #define OUT 0 /* außerhalb eines Wortes */
/* Zeilen, Worte und Zeichen zaehlen */
main() { int c, nl, nw, nc, state; state = OUT; nl = nw = nc = 0; while((c=getchar()) != EOF) { ++nc; if (c == '\n') ++nl; if (c == ' ' || c == '\n' || c == '\t') state = OUT; else if(state == OUT){ state = IN; ++nw; } } printf("%d %d %d\n", nl, nw, nc-1); system("PAUSE"); return 0; }
|
Meine Frage dazu ist, wie genau hier das Wort erkannt wird? Ich habe nachgeschaut wie das mit dem Kontrollstrukturen ist. if scheint zu else if zumindest nach dem ersten if äquivalent zu sein. Also kann ich ich folgender Struktur: if - if -if -if mit if - else if - else if - else if gleichsetzen. Wenn ich nun den Kontrollvorgang übersetze, versteh ich aber nun gar nicht wie das Programm ein Wort erkennt:
Während Zeichen eingetippt werden inkrementiere nc. Ist dabei das eingegebene Zeichen die Enter-Taste (neue Zeile), inkrementiere nl. Ist das Zeichen aber eine Leertaste, eine Enter-Taste oder eine Tabulatortaste setze state=OUT, das heißt, das Zeichen ist außerhalb eines Wortes. Nun folgt else if(state==OUT): Ist nun das eingebene Zeichen außerhalb eines Wortes soll es nach meinem Verständniss auf einmal in einem Wort sein: state==IN und es soll Inkrementiert werden. :/
Kann mir das netterweise jemand mal erklären wie das hier fabriziert wird und zu verstehen ist?
Lieben Gruß, xedosh Dieser Post wurde am 26.09.2006 um 17:29 Uhr von Xedosh editiert. |