Wörter aus Textdatei zählen und Anzahl mit jeweiliger Wortlänge angeben

Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 

main() {
       
       FILE *ptr_datei;
       int bs,ch,zeichenzaehl = 0, woerter,anzahl = 1;
       int i1 =0, xy =0,i2 = 0;
       int alphabet[26];
       int woerter2, anzahl2, bs2;
       int prozent[26];
       char wort[100][20];
       char wort2[100];
       char zeichenausgabe;
       char buchstabe_klein = 97;
       char buchstabe_gross = 65;
       char dat_nam[20];
       memset(alphabet, 0, sizeof(alphabet)); 	
       
       
       printf("Auswertung einer Datei\n");
       
       gets(dat_nam);
       
       ptr_datei=fopen(dat_nam,"r");
       if(ptr_datei == NULL){
                  printf("Fehler beim Oeffnen der Datei");
                           }
                           
       printf(" Die Komplette Datei ausgegeben >>>\n\n\n");
       printf("-----------------------------------------------\n\n\n");
       
       ch=fgetc(ptr_datei);
       
       while(!feof(ptr_datei)){
                               zeichenzaehl++;
             fscanf(ptr_datei,"%c", &zeichenausgabe);
             
                  if(!feof(ptr_datei)){
                          printf("%c",zeichenausgabe);
                          if((zeichenausgabe == 10) ||(zeichenausgabe == '\n') || (zeichenausgabe == ' ')){
                                      woerter++;
                                   
                                      bs = 0;
                                      anzahl++; 
                          
                                      
                                                                                      }
                          
                          if(!((zeichenausgabe == 10) ||(zeichenausgabe == '\n') || (zeichenausgabe == ' '))){
                                               wort[anzahl][bs] = zeichenausgabe;  //Hier haenge ich
                                               bs++; } //EDIT SCHLIESENDE KLAMMER VEREGSSEN
bs soll die Buchstaben hochzaehlen, bei LEER, TAB oder ENTER faengt er das zaehlen wieder bei 0 an.
anzahl soll hochgezaehlt werden, wenn bs auf 0 gesetzt wurde, somit aktiv die Anzahl der Woerter mit bs-Zeichen mitzaehlen...

Ich merke selber dass ich mich gerade undeutlich ausdrueck aber irgendwie haenge ich momentan ziemlich :(

MfG
 
Zuletzt bearbeitet:
Hi.

Also dieses Gewurschtel mit dem feof vergisst du mal am besten ganz schnell wieder. Das klappt so nicht.

Lies doch einfach Zeichen für Zeichen in einer Schleife ein und verarbeite in der Schleife nur dieses einzelne Zeichen.
C:
int c;

while ((c = fgetc(ptr_datei)) != EOF) {

}
Wie du einen Wortanfang erkennst weißt du ja schon, jetzt müßtest du nur noch ein Wortende erkennen. Bei einem Wortanfang setzt du einfach einen Zähler auf 1 und zählst diesen solange hoch bis du das Wortende erreicht hast. Dann weißt du wie lang das Wort gewesen ist.

Die Länge der Wörter zählst du am besten in einem int Array.

Gruß

PS: Man verwendet keine "magischen Zahlen" im Code. Ich weiß jetzt nicht aus dem Hut welches Zeichen den ASCII Code 10 hat. Soll das ein '\t' sein?
 
@ sheel:
Danke, hab mich in der ASCII-Tab verschaut, wollte den Tab nehmen, hab ich jetzt durch '\t' ausgetauscht..

@deepthroat:
Danke für den Tipp, ich hab einfach ne Blockade... Bin zusehr auf meinen alten Text vertieft..
das ist leider das einzige was ich in den letzten 20 min hingebracht habe, auch nicht deutlich besser und unterscheidet sich kaum zum 1. versuch :(

du meintest, alles in eine schleife zu packen, dazu fehlt mir wahrscheinlich der horizont...

Code:
int c,d=0,e;
                          int f[20];
                          while ((c = fgetc(ptr_datei)) != EOF) {
                                if(!((c=='\t') || (c == '\n') || (c == ' '))){
                                d++; //Wortanfang, Zaehler wird erhoeht
                                                                           }
                                if((c=='\t') || (c=='\n') || (c== ' ')){
                                             
                                             d=0; //Zaehler zuruecksetzen, (da Wortenden) fuer Wortanfang
                                              //mir fehlt hier nun das array um hochzuzaehlen.. hier ist meine einzigste idee wieder ein arr[x][x]..
                                                                        }
                                                                 }

MfG
 
@ sheel:
Danke, hab mich in der ASCII-Tab verschaut, wollte den Tab nehmen, hab ich jetzt durch '\t' ausgetauscht..

@deepthroat:
Danke für den Tipp, ich hab einfach ne Blockade... Bin zusehr auf meinen alten Text vertieft..
das ist leider das einzige was ich in den letzten 20 min hingebracht habe, auch nicht deutlich besser und unterscheidet sich kaum zum 1. versuch :(
Das hatten wir doch aber schon längst durchgesprochen?! :confused:

C:
int was_a_space = 1, c;
int word_length;

while ((c = fgetc(ptr_datei)) != EOF) {
  int is_a_space = isspace(c);
 
  if (was_a_space && !is_a_space) {
    // Wortanfang
    word_length = 1;
  } else if (...) { // Wortende
    printf("%d\n", word_length);
  } else {
    // weder Wortanfang, noch Wortende => mitten im Wort oder in Leerzeichen
    ++word_length;
  }
  was_a_space = is_a_space;
}
Gruß
 
So ein Mist :D
Dann gibts wohl einen Fehler im System ;)

Gut, dann lasse ich das mal so und probiere mich jetzt an dem Problem der Woerlänge.
Danke dir
 
Noch ein Hinweis: in der Aufgabe stand, dass du die Datei zeilenweise verarbeiten sollst, also fgets verwenden mußt.

Vielleicht solltest du es aber erstmal nur mit fgetc machen und später umbauen.

Gruß
 
Zurück