Buchstaben aus Text auslesen und zählen.



  • Hi,

    Ich benötige ein C-Programm, welches die Häufigkeiten von bestimmten Buchstaben (z.B. h, b und i) aus einer Textdatei ausliest und deren Häufigkeit zählt.
    Die Ausgabe sollte z.B. folgendermaßen aussehen:

    h = 9845
    b = 7892
    i = 5654

    Vielen Dank für eure Bemühungen 😉



  • Du benötigst dazu:

    • eine while -Schleife, die bis ans Ende der Datei liest,
    • drei if -Abfragen, die jeweils einen Buchstaben behandeln und
    • die Funktion getc, die Zeichenweise aus einer Datei liest.

    So, und jetzt zeig' uns Deine Bemühungen 😉



  • #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>

    int main(int argc, char *argv[])
    {
    char Kommando[500];
    char Dateiname[]={"C:\\Lied.mp3"};

    wsprintf(Kommando,"open \"%s\" alias mp3player shareable",Dateiname);
    mciSendString(Kommando,0,0,0);
    mciSendString("set mp3player time format milliseconds",0,0,0);
    mciSendString("play mp3player",0,0,0);
    _sleep(5000);
    mciSendString("pause mp3player",0,0,0);
    _sleep(2000);
    mciSendString("resume mp3player",0,0,0);

    system("PAUSE");
    mciSendString("stop mp3player",0,0,0);
    mciSendString("close mp3player",0,0,0);

    return 0;
    }



  • monstermunchkin schrieb:

    [*] drei if -Abfragen, die jeweils einen Buchstaben behandeln...

    oder switch/case, so etwa:

    switch (fgetc(...))
    {
       case 'h'
       h++;
       break;
    
       ... // usw.
    }
    

    kachelator: nö, so bestimmt nicht.
    🙂



  • wofür brauchste das`?

    mfg,
    free homework service ( busy )



  • also das ist quasi so ein riesiges Refertat was wir
    für den Informatikunterricht gebrauchen.

    Leider ist das eigentliche Programmieren nur noch
    "NEbensache" und wir müssen als HAuptaufgabe
    so eine Mappe anlegen.
    DA ich nicht so gut im programmieren bin und mich
    dann nicht so lange damit aufhalten möchte, hab ich das mal hier
    mit Hoffnung auf Hilfe gepostet.:)

    danke



  • @kachelator: vllt. falscher Thread? xD

    so könnte es vllt. aussehen (syntaktisch natürlich nicht ganz korrekt, aber von der Logik her müsste es gehen):

    #include <stdio.h>
    #include <stdlib.h>
    
    #define MAX 50
    
    FILE *in_file, *fopen();
    
    main()
    {
          int a = 0, b = 0, c = 0;
          int loop = 0;
          char buffer[MAX];
    
          if( (in_file = fopen("C:\\deine_Datei.txt", "r")) == NULL)
              exit(-1);
    
          while( (buffer[loop] = fgetc(in_file)) != EOF)
          {
                 if(buffer[loop] == 'a')
                                 a++;
                 ...
                 ...
                 ...
                 loop++;
          }
          fclose(in_file);
    
          printf("\nVorkommen von A: %d", a);
    }
    


  • tommy123 schrieb:

    DA ich nicht so gut im programmieren bin und mich
    dann nicht so lange damit aufhalten möchte, hab ich das mal hier
    mit Hoffnung auf Hilfe gepostet.:)

    danke

    Wenn Programmieren dein Hauptfach ist, dann wirst du mit der Copy and Paste Strategie nicht weit kommen, Bruder.

    @_qwert:

    Das geht auch "etwas" kürzer, guck:

    int main() 
    { 
    	FILE* fp = stdin; // Kann auch ein Textdateizeiger sein.
    	int abc[256] = {0}, c = 0;
    	//////////////////////// Zeichen einlesen ////////////////////////////////
    	while ( '\n' != ( c = fgetc(fp) ) && c != EOF )
    		abc[c]++;
    	//////////////////////// Zeichen gucki machen ////////////////////////////
    	for ( c = 0; c < 256; c++ )
    		if ( abc[c] != 0 )
    			printf ( "%c = %3d\n", c, abc[c] );
    	return 0;
    }
    

    Für Tabs und andere Steuerzeichen die Ausgabe evtl. noch anpassen.
    Gruß,
    B.B.



  • int loop = MAX + 1;  // OHOH !! Array EXPLOSION!!
    


  • Big Brother schrieb:

    @_qwert:

    Das geht auch "etwas" kürzer, guck:

    int main() 
    { 
    	FILE* fp = stdin; // Kann auch ein Textdateizeiger sein.
    	int abc[256] = {0}, c = 0;
    	//////////////////////// Zeichen einlesen ////////////////////////////////
    	while ( '\n' != ( c = fgetc(fp) ) && c != EOF )
    		abc[c]++;
    	//////////////////////// Zeichen gucki machen ////////////////////////////
    	for ( c = 0; c < 256; c++ )
    		if ( abc[c] != 0 )
    			printf ( "%c = %3d\n", c, abc[c] );
    	return 0;
    }
    

    Für Tabs und andere Steuerzeichen die Ausgabe evtl. noch anpassen.
    Gruß,
    B.B.

    Ja klar, ich hatt jetzt nur 5min. Zeit, und hab des schnell ausm Kopf gemacht, ohne mir "verkürzende" Methoden auszudenken^^

    ooooops! schrieb:

    int loop = MAX + 1;  // OHOH !! Array EXPLOSION!!
    

    Ja, keine Ahnung warum ich das so geschrieben hab -.-
    wurde gleich verbessert^^



  • Aber er liest nur die erste Zeile aus ⚠



  • Benutze fopen("C:\\deine_Datei.txt", "rb")
    statt fopen("C:\\deine_Datei.txt", "r").

    Mit "r" werden nur Textzeichen eingelesen und bei nicht-Textzeichen wird mit dem Lesen aufgehört, mit "rb" werden alle eingelesen.



  • nwp2 schrieb:

    Mit "r" werden nur Textzeichen eingelesen und bei nicht-Textzeichen wird mit dem Lesen aufgehört...

    nein, stimmt nicht.


Log in to reply