home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
tc20
/
wcount.c
< prev
next >
Wrap
Text File
|
1988-08-14
|
4KB
|
94 lines
/* WCOUNT.C - Ein Beispielprogramm für die Verwendung
des integrierten Debuggers
Copyright (c) 1988 Borland International. "All rights reserved."
*/
#include <stdio.h>
#include <string.h>
#include <process.h>
#include <ctype.h>
#define MAXWORDLEN 16 /* maximale Länge eines Wortes */
#define NUL ((char)0) /* Endemarke (Nullzeichen) */
#define SPACE ((char)0x20) /* Trennzeichen zwischen Wörtern */
char *nextword(char *lineptr)
{
while (*lineptr==SPACE) /* Solange der Zeiger auf ein Leerzeichen */
lineptr++; /* zeigt, wird er erhöht */
return(lineptr); /* Ergebnis: Zeiger auf das */
} /* nächste "Nicht-Leerzeichen" */
int wordlen(char *wordstart)
{ char *charptr; /* Arbeitszeiger */
charptr = wordstart; /* Arbeitszeiger auf den übergebenen Startwert */
while (*charptr & /* Solange das "momentane" Zeichen != NUL */
*charptr != SPACE) /* und != SPACE ist: */
charptr++; /* Arbeitszeiger auf das nächste Zeichen */
return(charptr-wordstart); /* Ergebnis: Wortende - Start = Länge */
}
/************ Hauptprogramm *****************/
void main(void)
{ FILE *infile; /* Eingabedatei */
char linebuf[1024]; /* "momentane Zeile" */
char *lineptr; /* Zeiger auf das erste/nächste Wort in linebuf */
int i; /* für Schleifen usw. */
static int wordlens[MAXWORDLEN], /* speichert die Wortlängen */
longwords; /* Für Wörter > MAXWORDLEN */
printf("VORSICHT! WCOUNT.C ist ein Übungsprogramm für den\n");
printf("Debugger von Turbo C. Wenn Sie dieses Programm *nicht*\n");
printf("von der integrierten Entwicklungsumgebung aus gestartet haben,\n");
printf("dann drücken Sie bitte jetzt Ctrl-Break - ansonsten hängt sich\n");
printf("das System auf.\n");
printf("Informationen finden Sie in Kapitel 4 des Benutzerhandbuchs.\n");
printf( "Geben Sie den Namen der Textdatei ein (WCOUNT.DAT): ");
gets(linebuf); /* linebuf wird hier "mißbraucht" */
if (!strlen(linebuf)) /* nur RETURN gedrückt? */
strcpy(linebuf, "WCOUNT.DAT"); /* Standardvorgabe einsetzen */
infile = fopen(linebuf, "r"); /* Öffnen der Datei */
if (!infile)
{ printf( "Fehler beim Öffnen von %s\n", linebuf);
exit(1);
}
while (fgets(linebuf, sizeof(linebuf), infile)) /* Lesen einer Zeile */
{ printf("%s",linebuf); /* Ausgabe */
/* Prüfung des Pufferendes und Entfernen des abschließenden \n */
i = strlen(linebuf); /* Länge der Zeile */
if (linebuf[i-1] != '\n' ) /* Zeilenvorschub als letztes Zeichen? */
printf( "Beginn einer überlangen Zeile:\n\t%70s\n", linebuf );
else
linebuf[i-1] = NUL; /* O.K. - Zeilenvorschub durch NUL ersetzen */
lineptr = nextword(linebuf); /* Ermitteln des ersten Wortanfangs */
while (*lineptr)
{ i = wordlen(lineptr); /* Bestimmung der Wortlänge */
if (i > MAXWORDLEN) /* größer als MAXWORDLEN? */
longwords++; /* ja - wird als "langes Wort" gespeichert */
else
; /* sonst den entsprechenden Zähler erhöhen */
wordlens[i]++;
lineptr += i; /* Zeiger um die Wortlänge erhöhen */
lineptr = nextword(lineptr); /* gibt es ein weiteres Wort? */
} /* while (*lineptr) */
} /* while (fgets...) */
printf( " Länge Anzahl\n" ); /* Ausgabe der Wortlängen */
for ( i=1; i<MAXWORDLEN; i++ )
printf( " %5d %5d\n", i, wordlens[i] );
printf( "Überlange Wörter: %5d\n", longwords);
/* Schließen der Datei und Programmende */
fclose(infile);
}