hugo zählen

Dieses Thema im Forum "C/C++" wurde erstellt von Mono, 20.08.2006.

  1. Mono

    Mono Grünschnabel

    Dabei seit:
    20.08.2006
    Beiträge:
    2
    Zustimmungen:
    0
    Ort:
    im Norden
    Tag! Hab vorhin gesehen das jemand ein ähnliches Problem gepostet hat, aber wie funktioniert das jetzt in C genau, wenn ich aus einer Datei report.txt die Vorkommen eines best. Strings (zB. hugo) zählen muss?
    thx
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 hazelnoot, 20.08.2006
    hazelnoot

    hazelnoot www.mywm.dl.am

    Dabei seit:
    13.10.2005
    Beiträge:
    377
    Zustimmungen:
    0
    Ort:
    in Geiersberg
    hi!

    also ich wuerde das so loesen:
    Code:
    int count(const char *str, const char *search){/*ich gehe mal davon aus dass die uebergabe parameter nicht veraendert werden duerfen*/
      int c = 0; /*in dieser variable steht spaeter wie oft das wort gefunden wurde*/
      char *pos;/*das ist unser str im endeffekt nur dass es eben nachhaerveraendert wird*/
    
      pos = malloc(strlen(str));/*lege den speicher fuer unser pos an*/
      memcpy(pos, str, strlen(str));/*kopiere str in pos*/
      
      while(pos){
        pos = strstr(pos, search);/*suche search in pos*/
    
        if(pos == NULL){/*wurde keins gefunden?... schleife abbrechen*/
          return c;/*c zurueckgeben*/
        }
    
        pos += (strlen(search) + 1);/*zaehle den speicher hinauf damit weitergesucht wird und nicht das selbe hugo nochmal vorkommt*/
        c++;/*anzahl der gefundenen plus 1*/
      }
    }
    
    die methode gibt zurueck wie oft sie den ausdruck search gefunden hat

    und ein beispielprogramm zu dieser funktion waere folgendes:
    Code:
    int main(void){
      int s = count("hallo hugo das ist aber ein schoener tag oder hugo? ja sagt darauf der hugo", "hugo");
      printf("%d\n", s);/*gibt in unserem fall 3 aus*/
    }
    
    tja ich hoffe ich konnte dir helfen

    mfg hazelnoot
     
  4. Mono

    Mono Grünschnabel

    Dabei seit:
    20.08.2006
    Beiträge:
    2
    Zustimmungen:
    0
    Ort:
    im Norden
    Danke, das sieht echt ganz gut aus!
    Meine letztes Problem ist dann, dass er hugo in der Datei report.txt zählen soll
    Code:
    FILE *report;
     report=fopen("report.txt","r");
    Wie muss ich das angeben?
    Statt
    ??
     
  5. #4 hwj, 20.08.2006
    Zuletzt bearbeitet: 20.08.2006
    hwj

    hwj Doppel-As

    Dabei seit:
    23.06.2006
    Beiträge:
    131
    Zustimmungen:
    0
    Ort:
    Bei Buxtehude
    Code:
    pos = malloc(strlen(str));/*lege den speicher fuer unser pos an*/
    So produzierst Du ein schönen Speicherleck - warum überhaupt was allozieren, wir suchen doch nur im Suchstring, besser:

    Code:
    int count(const char *str, const char *search){
      int count = 0;
      int len = strlen(search);
      char *pos;
    
      while((pos = strstr(str, search)) != NULL) {
        count++;
        pos += len;
      }
    
      return count;
    }
    PS: ... und das Einlesen: Am einfachsten wäre die Annahme, das die Datei zeilenweise zu lesen ist, und dass das Suchwort nicht über ein Zeilenende hinausgeht (also kein \n enthält). Dann würde wohl folgendes funktionieren:

    Code:
    FILE *report=fopen("report.txt","r");
    int rowsize = 4096;
    char *row = malloc(rowsize);
    int total = 0;
    
    if (row != NULL) {
        if (report != NULL) {
            while (fgets(row, rowsize, report) != NULL) {
                total += count(row, "suchstring");
            }
        }
        free(row);
    }
    if (report != NULL)
        fclose(report);
    
    Bei fgets gab es glaube ich das Problem, wenn die Zeilenlänge in der Datei größer als der übergebene Buffer ist, wird keine \0 drangehängt - also stell sicher, das keine Zeile länger ist :-)
    Wenn die Datei nicht SOOO groß ist, kannst Du sie natürlich auch vorher komplett mit fread() einlesen ...

    Heiko
     
  6. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

hugo zählen

Die Seite wird geladen...

hugo zählen - Ähnliche Themen

  1. Dateien selektieren und zählen

    Dateien selektieren und zählen: Hallo, das ist mein erster Beitrag, bitte entschuldigt, falls nicht alles richtig geschrieben ist. Ich muss meine erste Hausaufgabe als...
  2. Debian LTS in Zahlen

    Debian LTS in Zahlen: Der französische Debian-Entwickler Raphaël Hertzog erläuterte auf der Mini DebConf in Lyon in einem Vortrag das Projekt »Debian Long Term...
  3. Red Hats Quartals- und Jahreszahlen übertreffen erneut die Erwartungen

    Red Hats Quartals- und Jahreszahlen übertreffen erneut die Erwartungen: Red Hat hat im fiskalischen Jahr 2014 wie auch im vierten Quartal die Erwartungen der Börse und der Anleger erneut übertroffen. In den 24 Stunden...
  4. 16bit-Wavedatei als Hilfestellung für Zufallszahlen

    16bit-Wavedatei als Hilfestellung für Zufallszahlen: Hallo, kennt einer ein Programm, welches man nutzen kann um aus einer Wave-Datei byte-weise etwas herauszulesen? Habe das im Video...
  5. Artikel: Octave - Teil 2: Funktionen, Graphen und komplexe Zahlen

    Artikel: Octave - Teil 2: Funktionen, Graphen und komplexe Zahlen: Nachdem im ersten Teil die Grundfunktionen von Octave beschrieben wurden, geht es nun direkt mit praktischen Anwendungen weiter: Der Schwerpunkt...