home *** CD-ROM | disk | FTP | other *** search
/ Vectronix 2 / VECTRONIX2.iso / FILES_01 / PC_V11_B.LZH / DEMO_PD / WCOUNTB.C < prev    next >
C/C++ Source or Header  |  1991-08-29  |  7KB  |  141 lines

  1. /************************************************************************/
  2. /*                                                                      */
  3. /*       WCOUNTB.C                                                      */
  4. /*                                                                      */
  5. /*       Ein Beispielprogramm für die Verwendung des Pure Debuggers.    */
  6. /*                                                                      */
  7. /*       ACHTUNG:       DIESES PROGRAMM ENTHÄLT EINIGE FEHLER!!!        */
  8. /*                                                                      */
  9. /*       Copyright (c) 1989 Borland International.                      */
  10. /*       All rights reserved.                                           */
  11. /*                                                                      */
  12. /************************************************************************/
  13.  
  14. #include <stdio.h>
  15. #include <string.h>
  16. #include <stdlib.h>
  17. #include <ctype.h>
  18.  
  19. #define MAXWORDLEN 16               /* maximale Länge eines Wortes      */
  20. #define NUL   ((char)0)             /* Endemarke (Nullzeichen)          */
  21. #define SPACE ((char)0x20)          /* Trennzeichen zwischen Wörtern    */
  22.  
  23. char *nextword( char *lineptr );
  24. int  wordlen( char *wordstart );
  25.  
  26. /* -------------------------------------------------------------------- */
  27. /*       Hauptprogramm                                                  */
  28. /* -------------------------------------------------------------------- */
  29.  
  30. void main( void )
  31. {
  32.    FILE       *infile;                  /* Eingabedatei                 */
  33.    char       linebuf[1024];            /* "momentane Zeile"            */
  34.    char       *lineptr;                 /* Zeiger auf das erste/nächste */
  35.                                         /* Wort in linebuf              */
  36.    int        i;                        /* für Schleifen usw.           */
  37.    static int wordlens[MAXWORDLEN + 1], /* speichert die Wortlängen     */
  38.               longwords;                /* Für Wörter > MAXWORDLEN      */
  39.  
  40.  
  41.    printf( "VORSICHT!\n\n");
  42.    printf( "WCOUNTB.C ist ein Übungsprogramm für Pure Debugger.\n");
  43.    printf( "Wenn Sie dieses Programm nicht vom Debugger aus gestartet\n" );
  44.    printf( "haben, dann drücken Sie bitte nur <Return>!\n\n" );
  45.    printf( "Ansonsten hängt sich das System auf.\n\n" );
  46.    printf( "Weitere Informationen finden Sie im Benutzerhandbuch.\n\n" );
  47.  
  48.    printf( "Geben Sie den Namen der Textdatei ein (z.B. TEXT.DAT): " );
  49.  
  50.    gets( linebuf );                 /* linebuf wird hier "mißbraucht"   */
  51.  
  52.    if ( !strlen( linebuf ))         /* nur RETURN gedrückt?             */
  53.       exit( 1 );                    /* Dann Programm vorzeitig beenden. */
  54.  
  55.    infile = fopen( linebuf, "r" );  /* Öffnen der Datei                 */
  56.    if ( !infile )
  57.    {
  58.       printf( "Fehler beim Öffnen von %s\n", linebuf );
  59.       exit( 1 );
  60.    }
  61.  
  62.                                     /* Lesen einer Zeile                */
  63.    while ( fgets(linebuf, sizeof( linebuf ), infile ))
  64.    {
  65.       printf( "%s", linebuf );      /* Ausgabe                          */
  66.  
  67.                                     /* Prüfung des Pufferendes und      */
  68.                                     /* Entfernen des abschließenden \n  */
  69.       i = strlen( linebuf );        /* Länge der Zeile                  */
  70.       if ( linebuf[i - 1] != '\n' ) /* Zeilenvorschub letztes Zeichen?  */
  71.          printf( "Beginn einer überlangen Zeile:\n\t%70s\n", linebuf );
  72.       else
  73.          linebuf[i - 1] = NUL;      /* Zeilenvorschub ersetzen          */
  74.  
  75.       lineptr = nextword( linebuf );/* Ermitteln des ersten Wortanfangs */
  76.  
  77.       while ( *lineptr )
  78.       {
  79.          i = wordlen( lineptr );    /* Bestimmung der Wortlänge         */
  80.          if ( i > MAXWORDLEN )      /* größer als MAXWORDLEN?           */
  81.             longwords++;            /* ja - wird als "langes Wort"      */
  82.          else                       /* gespeichert                      */
  83.             wordlens[i]++;          /* sonst den entsprechenden Zähler  */
  84.                                     /* erhöhen                          */
  85.  
  86.          lineptr += i;              /* Zeiger um die Wortlänge erhöhen  */
  87.  
  88.          lineptr = nextword( lineptr ); /* gibt es ein weiteres Wort?   */
  89.       }
  90.    }
  91.  
  92.    printf( "  Länge  Anzahl\n" );   /* Ausgabe der Wortlängen           */
  93.    for ( i = 1; i <= MAXWORDLEN; i++ )
  94.       printf( "  %5d %5d\n", i, wordlens[i] );
  95.    printf( "Überlange Wörter: %5d\n", longwords );
  96.  
  97.    fclose(infile);                  /* Schließen der Datei und          */
  98.    exit( 0 );                       /* Programmende                     */
  99. }
  100.  
  101. /* -------------------------------------------------------------------- */
  102. /*       char *nextword( char *lineptr );                               */
  103. /*                                                                      */
  104. /*       Funktion liefert einen Zeiger auf den Start des nächsten       */
  105. /*       'Wortes' in einer Zeile.                                       */
  106. /* -------------------------------------------------------------------- */
  107.  
  108. char *nextword( char *lineptr )
  109. {
  110.    while ( *lineptr == SPACE )      /* Solange der Zeiger auf ein Leer- */
  111.       lineptr++;                    /* zeichen zeigt, wird er erhöht    */
  112.  
  113.    return( lineptr );               /* Ergebnis: Zeiger auf das         */
  114. }                                   /* nächste "Nicht-Leerzeichen"      */
  115.  
  116. /* -------------------------------------------------------------------- */
  117. /*       int wordlen( char *wordstart );                                */
  118. /*                                                                      */
  119. /*       Funktion berechnet die Länge eines 'Wortes'.                   */
  120. /* -------------------------------------------------------------------- */
  121.  
  122. int wordlen( char *wordstart )
  123. {
  124.    char *charptr;                   /* Arbeitszeiger                    */
  125.  
  126.    charptr = wordstart;             /* Arbeitszeiger auf den über-      */
  127.                                     /* gebenen Startwert                */
  128.  
  129.                                     /* Solange das "momentane" Zeichen  */
  130.                                     /* != NUL und != SPACE ist:         */
  131.    while ( *charptr & *charptr != SPACE )
  132.       charptr++;                    /* Arbeitszeiger auf das nächste    */
  133.                                     /* Zeichen                          */
  134.  
  135.    return( charptr - wordstart );   /* Ergebnis:                        */
  136. }                                   /* Wortende - Start = Länge         */
  137.  
  138. /* -------------------------------------------------------------------- */
  139. /*       Ende WCOUNTB.C                                                 */
  140. /* -------------------------------------------------------------------- */
  141.