home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Vectronix 2
/
VECTRONIX2.iso
/
FILES_01
/
PC_V11_B.LZH
/
DEMO_PD
/
WCOUNTB.C
< prev
next >
Wrap
C/C++ Source or Header
|
1991-08-29
|
7KB
|
141 lines
/************************************************************************/
/* */
/* WCOUNTB.C */
/* */
/* Ein Beispielprogramm für die Verwendung des Pure Debuggers. */
/* */
/* ACHTUNG: DIESES PROGRAMM ENTHÄLT EINIGE FEHLER!!! */
/* */
/* Copyright (c) 1989 Borland International. */
/* All rights reserved. */
/* */
/************************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.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 );
int wordlen( char *wordstart );
/* -------------------------------------------------------------------- */
/* 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 + 1], /* speichert die Wortlängen */
longwords; /* Für Wörter > MAXWORDLEN */
printf( "VORSICHT!\n\n");
printf( "WCOUNTB.C ist ein Übungsprogramm für Pure Debugger.\n");
printf( "Wenn Sie dieses Programm nicht vom Debugger aus gestartet\n" );
printf( "haben, dann drücken Sie bitte nur <Return>!\n\n" );
printf( "Ansonsten hängt sich das System auf.\n\n" );
printf( "Weitere Informationen finden Sie im Benutzerhandbuch.\n\n" );
printf( "Geben Sie den Namen der Textdatei ein (z.B. TEXT.DAT): " );
gets( linebuf ); /* linebuf wird hier "mißbraucht" */
if ( !strlen( linebuf )) /* nur RETURN gedrückt? */
exit( 1 ); /* Dann Programm vorzeitig beenden. */
infile = fopen( linebuf, "r" ); /* Öffnen der Datei */
if ( !infile )
{
printf( "Fehler beim Öffnen von %s\n", linebuf );
exit( 1 );
}
/* Lesen einer Zeile */
while ( fgets(linebuf, sizeof( linebuf ), infile ))
{
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 letztes Zeichen? */
printf( "Beginn einer überlangen Zeile:\n\t%70s\n", linebuf );
else
linebuf[i - 1] = NUL; /* Zeilenvorschub 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" */
else /* gespeichert */
wordlens[i]++; /* sonst den entsprechenden Zähler */
/* erhöhen */
lineptr += i; /* Zeiger um die Wortlänge erhöhen */
lineptr = nextword( lineptr ); /* gibt es ein weiteres Wort? */
}
}
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 );
fclose(infile); /* Schließen der Datei und */
exit( 0 ); /* Programmende */
}
/* -------------------------------------------------------------------- */
/* char *nextword( char *lineptr ); */
/* */
/* Funktion liefert einen Zeiger auf den Start des nächsten */
/* 'Wortes' in einer Zeile. */
/* -------------------------------------------------------------------- */
char *nextword( char *lineptr )
{
while ( *lineptr == SPACE ) /* Solange der Zeiger auf ein Leer- */
lineptr++; /* zeichen zeigt, wird er erhöht */
return( lineptr ); /* Ergebnis: Zeiger auf das */
} /* nächste "Nicht-Leerzeichen" */
/* -------------------------------------------------------------------- */
/* int wordlen( char *wordstart ); */
/* */
/* Funktion berechnet die Länge eines 'Wortes'. */
/* -------------------------------------------------------------------- */
int wordlen( char *wordstart )
{
char *charptr; /* Arbeitszeiger */
charptr = wordstart; /* Arbeitszeiger auf den über- */
/* gebenen Startwert */
/* Solange das "momentane" Zeichen */
/* != NUL und != SPACE ist: */
while ( *charptr & *charptr != SPACE )
charptr++; /* Arbeitszeiger auf das nächste */
/* Zeichen */
return( charptr - wordstart ); /* Ergebnis: */
} /* Wortende - Start = Länge */
/* -------------------------------------------------------------------- */
/* Ende WCOUNTB.C */
/* -------------------------------------------------------------------- */