home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / tc20 / wcount.c < prev    next >
Text File  |  1988-08-14  |  4KB  |  94 lines

  1. /* WCOUNT.C - Ein Beispielprogramm für die Verwendung
  2.    des integrierten Debuggers
  3.  
  4.    Copyright (c) 1988 Borland International. "All rights reserved."
  5.  
  6. */
  7.  
  8. #include <stdio.h>
  9. #include <string.h>
  10. #include <process.h>
  11. #include <ctype.h>
  12.  
  13. #define MAXWORDLEN 16         /* maximale Länge eines Wortes */
  14. #define NUL   ((char)0)       /* Endemarke (Nullzeichen) */
  15. #define SPACE ((char)0x20)    /* Trennzeichen zwischen Wörtern */
  16.  
  17. char *nextword(char *lineptr)
  18. {
  19.   while (*lineptr==SPACE)   /* Solange der Zeiger auf ein Leerzeichen */
  20.     lineptr++;              /* zeigt, wird er erhöht */
  21.   return(lineptr);          /* Ergebnis: Zeiger auf das */
  22. }                           /* nächste "Nicht-Leerzeichen" */
  23.  
  24. int wordlen(char *wordstart)
  25. { char *charptr;          /* Arbeitszeiger */
  26.  
  27.   charptr = wordstart;      /* Arbeitszeiger auf den übergebenen Startwert */
  28.   while (*charptr &         /* Solange das "momentane" Zeichen != NUL */
  29.          *charptr != SPACE)   /* und != SPACE ist: */
  30.     charptr++;                /* Arbeitszeiger auf das nächste Zeichen */
  31.   return(charptr-wordstart);  /* Ergebnis: Wortende - Start = Länge */
  32. }
  33.  
  34. /************ Hauptprogramm *****************/
  35. void main(void)
  36. { FILE  *infile;        /* Eingabedatei  */
  37.   char  linebuf[1024];  /* "momentane Zeile" */
  38.   char  *lineptr;       /* Zeiger auf das erste/nächste Wort in linebuf */
  39.   int     i;            /* für Schleifen usw. */
  40.   static int wordlens[MAXWORDLEN],   /* speichert die Wortlängen */
  41.          longwords;     /* Für Wörter > MAXWORDLEN */
  42.  
  43.   printf("VORSICHT! WCOUNT.C ist ein Übungsprogramm für den\n");
  44.   printf("Debugger von Turbo C. Wenn Sie dieses Programm *nicht*\n");
  45.   printf("von der integrierten Entwicklungsumgebung aus gestartet haben,\n");
  46.   printf("dann drücken Sie bitte jetzt Ctrl-Break - ansonsten hängt sich\n");
  47.   printf("das System auf.\n");
  48.   printf("Informationen finden Sie in Kapitel 4 des Benutzerhandbuchs.\n");
  49.  
  50.   printf( "Geben Sie den Namen der Textdatei ein (WCOUNT.DAT): ");
  51.  
  52.   gets(linebuf);    /* linebuf wird hier "mißbraucht" */
  53.   if (!strlen(linebuf))   /* nur RETURN gedrückt? */
  54.     strcpy(linebuf, "WCOUNT.DAT");  /* Standardvorgabe einsetzen */
  55.  
  56.   infile = fopen(linebuf, "r");  /* Öffnen der Datei */
  57.   if (!infile)
  58.     { printf( "Fehler beim Öffnen von %s\n", linebuf);
  59.       exit(1);
  60.     }
  61.  
  62.   while (fgets(linebuf, sizeof(linebuf), infile))  /* Lesen einer Zeile */
  63.    { printf("%s",linebuf);                        /* Ausgabe */
  64.       /* Prüfung des Pufferendes und Entfernen des abschließenden \n */
  65.      i = strlen(linebuf);        /* Länge der Zeile */
  66.      if (linebuf[i-1] != '\n' )  /* Zeilenvorschub als letztes Zeichen? */
  67.        printf( "Beginn einer überlangen Zeile:\n\t%70s\n", linebuf );
  68.       else
  69.        linebuf[i-1] = NUL;   /* O.K. - Zeilenvorschub durch NUL ersetzen */
  70.  
  71.     lineptr = nextword(linebuf);   /* Ermitteln des ersten Wortanfangs */
  72.  
  73.     while (*lineptr)
  74.      { i = wordlen(lineptr);   /* Bestimmung der Wortlänge */
  75.        if (i > MAXWORDLEN)     /* größer als MAXWORDLEN? */
  76.          longwords++;          /* ja - wird als "langes Wort" gespeichert */
  77.         else
  78.          ;                     /* sonst den entsprechenden Zähler erhöhen */
  79.          wordlens[i]++;
  80.        lineptr += i;           /* Zeiger um die Wortlänge erhöhen */
  81.  
  82.        lineptr = nextword(lineptr); /* gibt es ein weiteres Wort? */
  83.      } /* while (*lineptr) */
  84.    } /* while (fgets...) */
  85.  
  86.   printf(  "  Länge  Anzahl\n" );      /* Ausgabe der Wortlängen */
  87.   for ( i=1; i<MAXWORDLEN; i++ )
  88.     printf( "  %5d %5d\n", i, wordlens[i] );
  89.   printf( "Überlange Wörter: %5d\n", longwords);
  90.  
  91.   /* Schließen der Datei und Programmende */
  92.   fclose(infile);
  93. }
  94.